home *** CD-ROM | disk | FTP | other *** search
/ RComp HTML Edit Studio for RISC OS / RComp HTML Edit Studio for RISC OS.iso / ZIPS / WDT.ZIP / HTMLEdit / Toolkit / !WebThumbs / bin / CFSI (.txt) < prev    next >
Encoding:
RISC OS BBC BASIC V Source  |  2002-04-13  |  165.4 KB  |  7,456 lines

  1.  > ChangeFSI v1.15xx
  2.  altered  x%=sx%*xmul%/xdiv%+.9999:y%=sy%*ymul%/ydiv%+.9999:rows%=sy%
  3.  to  x%=sx%*xmul%/xdiv%+.1:y%=sy%*ymul%/ydiv%+.1:rows%=sy%
  4.  This helps remove the ugly black border when thumbnailing.
  5.  altered <wimp$scrap> to <Wimp$ScrapDir>.CFSI.XXX" where X is [A-Z]
  6.  this ensures the scrapfile CFSI uses is unique if CFSI is called twice
  7.  Added <ChangeFSI$Hourglass> so the Hourglass in ChangeFSI can be turned
  8.  on/off externally.
  9.  altered END=&4000000 to &800000 to ensure only 8M is used by djpeg.
  10.  also added the -maxmemory 512 option to djpeg to ensure not too
  11.  much memory is used up.
  12.  NTH: changed to -maxmem 2048
  13.  Altered the A$ input variable to GS_Trans it so if system variables are
  14.  use in the input line they are correctly evaluted.
  15.  buffer% 256
  16.  "OS_GSTrans","<wimp$scrapDir>",buffer%,255
  17. &scrap$=
  18. getstring(buffer%)+".CFSI"
  19.  "OS_GSTrans","<ChangeFSI$Hourglass>",buffer%,255
  20. hourg$=
  21. getstring(buffer%)
  22. "ON|On|on",hourg$) 
  23.  hourg%=
  24.  hourg%=
  25. "OS_File",8,scrap$: scrap$+="."+
  26. (26))+
  27. (26))+
  28. (26))
  29. ("Set Wimp$Scrap2 "+scrap$)
  30. areanumber%=0
  31. "OS_GetEnv" 
  32.  "OS_GSTrans",A$,buffer%,256
  33. getstring(buffer%)
  34.  PRINT A$
  35.  !task%=
  36. A$," -wimp"):
  37.  task% 
  38.  z%(1),p%(3),s%(3),m$(30)
  39. ""A%=
  40. "<ChangeFSI$Dir>.Messages"
  41. #)B%=-1:
  42.  B%+=1:m$(B%)=
  43. startfile%=
  44. A$,6)<>"-wimp "
  45.  taskid%4:$taskid%="TASK"
  46.  "Wimp_Initialise",200,!taskid%,m$(20) 
  47.  version%
  48.  version%>=350 
  49. "OS_Memory",8+(2<<8) 
  50.  ,r1,r2:vramsize%=r1*r2
  51.  vramsize%>0 vram%=
  52.  vram%=
  53. vram%=
  54. Wimp    = (1<<18) + (3<<6)
  55. .HCreateW = Wimp+1:OpenW   = Wimp+5 :CloseW  = Wimp+6:RedrawW = Wimp+8
  56. /IUpdateW = Wimp+9:GetR%   = Wimp+10:GetW    = Wimp+11:SetI   = Wimp+13
  57. 0IGetI    = Wimp+14:GetP   = Wimp+15:Drag    = Wimp+16:CrMenu = Wimp+20
  58. DcMenu  = Wimp+21
  59.  "OS_SWINumberFromString",,"Wimp_PollIdle" 
  60.  Poll%
  61.  "OS_SWINumberFromString",,"XOS_SpriteOp" 
  62.  spopx%
  63.  "OS_SWINumberFromString",,"OS_SpriteOp" 
  64.  spop%
  65.  "OS_SWINumberFromString",,"OS_ReadMonotonicTime" 
  66.  Time%
  67.  "OS_SWINumberFromString",,"ColourTrans_ReturnColourNumber" 
  68.  ctran%
  69.  "OS_SWINumberFromString",,"Wimp_SetCaretPosition" 
  70.  Caretpos%
  71.  "OS_SWINumberFromString",,"Wimp_GetCaretPosition" 
  72.  Getcaret%
  73.  "XOS_SWINumberFromString",,"DragASprite_Start" 
  74.  dstart%;f%:
  75.  1 dstart%=0
  76.  "XOS_SWINumberFromString",,"JPEG_PlotScaled" 
  77.  jpegpaint%;f%:
  78.  1 jpegpaint%=0
  79.  "OS_Byte",161,&1C 
  80.  ,,f%:
  81. 2)=0 dstart%=0
  82. nextlocation%=
  83.  "Wimp_SlotSize",-1,-1 
  84.  originalslot%
  85. locale_initialise
  86.  version%>=300 
  87.  q% 255,ifactors% 15,factors% 15,pixtrans% 255,paltemp% 1023,buffer% 255,idata% 1023
  88.  z% 1699,q% 255,ifactors% 15,factors% 15,pixtrans% 255,paltemp% 1023,buffer% 255,idata% 2399
  89. eidata%=idata%+2400
  90. E2scrap%=
  91. :sprite%=
  92. :sar%=
  93. :saved%=
  94.  "OS_Byte",161,&8C 
  95.  ,,f%
  96. "Wimp_OpenTemplate",,"<ChangeFSI$Dir>.3dTemplate"
  97. "Wimp_OpenTemplate",,"<ChangeFSI$Dir>.Templates"
  98. "Wimp_CloseTemplate":
  99. $+" (code "+
  100.  version%>=300 
  101. name=q%
  102. P$$name="*":here%=0:largest_tem%=0
  103.  "Wimp_LoadTemplate", ,0,,,,name,0 
  104.  ,size%,,,,,here%
  105.  here%
  106.  largest_tem%<size% largest_tem%=size%
  107. $name="*"
  108.  "Wimp_LoadTemplate", ,0,,,,name,here% 
  109.  ,size%,,,,,here%
  110.  z% largest_tem%
  111. dotemplate("Info")
  112.  CreateW,,z% 
  113.  infow%:$!(z%+88+7*32+20)=m$(21)
  114. dotemplate("Processing")
  115.  CreateW,,z% 
  116.  proc%
  117. ]ap%(0)=!(z%+88+8*32+20):p%(1)=!(z%+88+9*32+20):p%(2)=!(z%+88+10*32+20):p%(3)=!(z%+88+12*32+20)
  118. dotemplate("Output")
  119.  CreateW,,z% 
  120.  output%:admode%=!(z%+88+20*32+20):adspcl%=!(z%+88+19*32+20):oldmode%=!(z%+88+34*32+20)
  121. dotemplate("Scaling")
  122.  CreateW,,z% 
  123.  scalew%:adscale%=!(z%+88+1*32+20)
  124. bcs%(0)=!(z%+88+10*32+20):s%(1)=!(z%+88+11*32+20):s%(2)=!(z%+88+12*32+20):s%(3)=!(z%+88+13*32+20)
  125. dotemplate("Save")
  126.  CreateW,,z% 
  127.  save%:adsave%=!(z%+88+1*32+20):adsavesprite%=!(z%+88+0*32+20)
  128. dotemplate("Sprite")
  129.  CreateW,,z% 
  130.  sinfo%:adsname%=!(z%+88+5*32+20):adsbytes%=!(z%+88+8*32+20)
  131. gHadsx%=!(z%+88+7*32+20):adsy%=!(z%+88+9*32+20):adsm%=!(z%+88+6*32+20)
  132. dotemplate("Source")
  133.  CreateW,,z% 
  134.  srcinfo%:adsrc%=!(z%+88+0*32+20)
  135. dotemplate("Range")
  136.  CreateW,,z% 
  137.  raninfo%:adran%=!(z%+88+0*32+20)
  138. dotemplate("Zoom")
  139.  CreateW,,z% 
  140.  zoom%:z%(0)=!(z%+88+4*32+20):z%(1)=!(z%+88+5*32+20)
  141. dotemplate("JPEGOutput")
  142.  CreateW,,z% 
  143.  jpego%:adjpegq%=!(z%+88+5*32+20)
  144. dotemplate("Pic")
  145.  CreateW,,z% 
  146.  pic%:adtitle%=z%!72
  147. "Wimp_CloseTemplate"
  148. t@!q%=-1:q%!4=0:q%!8=0:q%!12=68:q%!16=68:q%!20=%11000000000010
  149. u:$(q%+24)="!"+m$(20):
  150. "Wimp_CreateIcon",,q% 
  151.  iconbar%
  152. v*A%=
  153. "<ChangeFSI$Dir>.Choices":
  154.  A%=0 
  155. w]fast%=
  156. :dest%=1:statescale%=%10000000100:stateproc%=0:stateoutput%=&4052008:statejpeg%=&2
  157. xN$p%(0)="":$p%(1)="2"+decimal_point$+"2":$p%(2)="24":$p%(3)="4":$adspcl%=""
  158. y=$admode%="28":$s%(0)="1":$s%(1)="4":$s%(2)="1":$s%(3)="4"
  159. $adjpegq%="75":$oldmode%=""
  160. #A%,fast%,dest%,statescale%,stateproc%,stateoutput%,statejpeg%,$adjpegq%,$oldmode%
  161. #A%,$p%(0),$p%(1),$p%(2),$p%(3),$admode%,$adspcl%
  162. ~5$p%(1)=
  163. locale_convert($p%(1),".",decimal_point$)
  164. #A%,$s%(0),$s%(1),$s%(2),$s%(3)
  165. q%!12=1<<21
  166. @!q%=scalew%:
  167.  I%=0
  168.  statescale%>>I%
  169. 1 q%!8=1<<21 
  170.  q%!8=0
  171. q%!4=I%:
  172.  SetI,,q%:
  173.  I%=10
  174.  statescale%>>I%
  175. 1 q%!8=1<<21 
  176.  q%!8=0
  177. q%!4=I%+6:
  178.  SetI,,q%:
  179. =!q%=proc%:
  180.  I%=0
  181.  stateproc%>>I%
  182. 1 q%!8=1<<21 
  183.  q%!8=0
  184. q%!4=I%:
  185.  SetI,,q%:
  186. B!q%=output%:
  187.  I%=0
  188.  stateoutput%>>I%
  189. 1 q%!8=1<<21 
  190.  q%!8=0
  191. q%!4=I%:
  192.  SetI,,q%:
  193. >!q%=jpego%:
  194.  I%=0
  195.  statejpeg%>>I%
  196. 1 q%!8=1<<21 
  197.  q%!8=0
  198. q%!4=I%:
  199.  SetI,,q%:
  200.  stateoutput%>>17
  201. 1 q%!8=1<<22 
  202.  q%!8=0
  203. i!q%=output%:q%!12=1<<22:q%!4=7:
  204.  SetI,,q%:q%!4=8:
  205.  SetI,,q%:q%!4=13:
  206.  SetI,,q%:q%!4=14:
  207.  SetI,,q%
  208. showscaletofit:$z%(0)="1":$z%(1)="1"
  209.  "OS_UpdateMEMC" 
  210.  oldmemc
  211. jpegsave%=
  212. "OS_UpdateMEMC",oldmemc,&700:
  213. errorbox:
  214.  CrMenu,,-1
  215.  Drag,,-1
  216. sprite% 
  217.  "Wimp_SlotSize",originalslot%,-1
  218. CF$="":
  219.  startfile% startfile%=
  220. A$,"-wimp")+6):
  221. callFSI
  222.  Poll%,1,q% 
  223.  sprite% 
  224. redraw_window(!q%)
  225. open_window(!q%,q%!4,q%!8,q%!12,q%!16,q%!20,q%!24,q%!28)
  226.  &400c3,,q%:nextlocation%=
  227. removearea
  228.  "Wimp_SlotSize",originalslot%,-1:saved%=
  229. :sprite%=
  230. checkmouse(!q%,q%!4,q%!8,q%!12,q%!16,q%!20)
  231.  GetP,,q%:dw%=q%!12:di%=q%!16:
  232.  dstart% 
  233. "DragASprite_Stop"
  234. Jq%!12=0:q%!16=1:q%!20=dw%:q%!24=di%:q%!28=!q%:q%!32=q%!4:q%!36=!sar%+3
  235.  jpegsave% 
  236.  q%!40=&c85 
  237.  q%!40=&ff9
  238. /temp$=
  239. ZS(adsave%):foo%=
  240. temp$,"."):
  241.  foo%
  242. )temp$=
  243. temp$,foo%+1):foo%=
  244. temp$,".")
  245. -$(q%+44)=temp$+
  246. 0:!q%=44+(
  247.  temp$+1+3
  248.  "Wimp_SendMessage",17,q%,dw%,di%:myref%=q%!8
  249. key(!q%,q%!4,q%!24)
  250. menuselect(q%)
  251.  17,18:
  252. receive(q%)
  253. =&0800000
  254. "Set ChangeFSI$ReturnCode "+
  255. $+" (code "+
  256. +")":
  257. removearea:
  258. 1foo%=0:A%=
  259. ChangeFSI(A$,-1,-1,0,-1,-1,foo%,
  260. removearea:*unset ChangeFSI$ReturnCode
  261. dotemplate(a$)
  262.  version%>300 
  263.  "Wimp_LoadTemplate",,0,,,,a$+z$,0 
  264.  ,,indsize%
  265.  A% indsize%
  266. "Wimp_LoadTemplate",,z%,A%,A%+indsize%,-1,a$+z$,0
  267. "Wimp_LoadTemplate",,z%,idata%,eidata%,-1,a$+z$,0 
  268.  ,,idata%
  269. locale_initialise
  270.  decimal_point$=".":
  271.  "Territory_ReadSymbols",-1,0 
  272. decimal_point$=
  273. locale_convert(n$,f$,t$)
  274.  f$=t$ 
  275. n$,f$)
  276.  i%<>0 
  277. n$,i%-1)+t$+
  278. n$,i%+1)
  279. receive(q%)
  280.  q%!16 
  281. removearea:
  282.  "Wimp_CloseDown":
  283.  q%!20<>save% 
  284. B!q%=60:q%!12=q%!8:q%!16=2:q%!36=-1:$(q%+44)="<Wimp$Scrap2>"+
  285. "Wimp_SendMessage",17,q%,q%!4:scrap%=q%!8
  286.  jpegsave% 
  287. "OS_File",10,
  288. ZS(q%+44),&c85,,sar%,sar%+jpegsize%
  289.  spop%,&10C,sar%,
  290. ZS(q%+44)
  291. $adsave%=
  292. ZS(q%+44)
  293. 7q%!12=q%!8:q%!16=3:
  294.  "Wimp_SendMessage",18,q%,q%!4
  295.  q%!36<>-1 saved%=
  296.  CrMenu,,-1
  297.  3:F$=
  298. ZS(q%+44):
  299.  scrap% scrap%=scrap%=q%!12
  300. 6q%!12=q%!8:q%!16=4:
  301. "Wimp_SendMessage",17,q%,q%!4
  302. callFSI
  303.  q%!40 
  304.  &ff0,&c85
  305. 6q%!12=q%!8:q%!16=4:
  306. "Wimp_SendMessage",17,q%,q%!4
  307. ZS(q%+44):
  308. callFSI
  309.  saved%
  310. sprite% 
  311. -!buffer%=
  312. :$(buffer%+4)=m$(2)+F$+m$(3)+
  313. "Wimp_ReportError",buffer%,%10111,m$(20) 
  314. 3q%!12=q%!8:
  315.  A%<>1 
  316. "Wimp_SendMessage",19,q%,0
  317. 9,&400C1:
  318.  sprite% 
  319. getmodeinfo:
  320. &400d1,pic%,0,-32767,32767,0
  321. showscaletofit
  322. "XOS_ReadVarVal","ChangeFSI$Dir",paltemp%,256,0,3 
  323. ,,bootlen%
  324. paltemp%?bootlen%=13
  325. #q%!20,"Run "+$paltemp%
  326. callFSI
  327. checkvalues 
  328. deducemode:A%=47
  329. jpegsave%=
  330.  dest%=0 
  331. Ajpegsave%=
  332. :A$="JPEG":
  333. geticonstate(jpego%,2) A$="JPEGMONO"
  334. A$+=$adjpegq%
  335. geticonstate(output%,15) 
  336. A$+=$adspcl%
  337. geticonstate(output%,16) 
  338. geticonstate(output%,5)
  339. geticonstate(output%,11) A$+="R"
  340.  A$,3 
  341.  A%=63 
  342. geticonstate(output%,6) A$="27t"
  343. geticonstate(output%,12) A$="12t"
  344.  A%=255 A$+="d"
  345. /A$="garbage "+F$+" <ChangeFSI$Dir>.Foo "+A$
  346. ChangeFSISuffix
  347. %info$="":range$=m$(19):cputime%=0
  348.  sprite% !q%=pic%:
  349.  &400c3,,q%:saved%=
  350. :sprite%=
  351. nextlocation%=
  352.  "Wimp_SlotSize",originalslot%,-1:
  353. removearea
  354.  fast% 
  355.  "OS_UpdateMEMC",&300,&700 
  356.  oldmemc
  357. ChangeFSI(A$,-1,-1,nextlocation%,0,0,sar%,0)
  358.  fast% 
  359.  "OS_UpdateMEMC",oldmemc,&700
  360.  scrap% scrap%=
  361. "OS_File",6,F$
  362.  A%<2 
  363.  sar%<>0 
  364. -$adsx%=
  365.  xsp%:$adsy%=
  366.  ysp%:
  367.  jpegsave% 
  368. "$adsm%="JPEG":$adsname%="JPEG"
  369. $adsbytes%=
  370.  jpegsize%
  371. x=xsp%*2:y=ysp%*2
  372. &35,-1,4 
  373. ,,nx:
  374. &35,-1,5 
  375. =!ifactors%=1:ifactors%!4=1:ifactors%!8=nx:ifactors%!12=ny
  376. $adsavesprite%="file_c85"
  377. F$,7)="<Wimp$S" F$="JPEGImage"
  378.  spopx%,&10d,sar%,pixtrans%,255,1
  379. ZS(pixtrans%):
  380.  spopx%,&128,sar%,n$ 
  381. ,,,x,y,,m
  382. $adsm%=
  383.  m:$adsname%=n$
  384. $adsbytes%=
  385.  sar%!12
  386. &35,m,4 
  387. ,,nx:x=x<<nx
  388. &35,m,5 
  389. ,,ny:y=y<<ny:
  390. getmodeinfo
  391. $adsavesprite%="file_ff9"
  392. F$,7)="<Wimp$S" F$="SpriteFile"
  393. "/!q%=save%:q%!4=0:q%!8=0:q%!12=0:
  394.  SetI,,q%
  395. #c$adran%=range$:$adsrc%=info$+m$(0)+
  396. (cputime%
  397. 100)+decimal_point$+
  398. (cputime%
  399. 100),2)+m$(1)
  400. saved%=
  401. :sprite%=
  402. %)A%=
  403. "."+F$,A%,1)<>".":A%-=1:
  404. $adsave%=
  405. "."+F$,A%+1)
  406. pic%=
  407. create_window(x,y,F$)
  408. popup(pic%,-1)
  409. checkvalues
  410.  e,error$,flag%
  411.  dest%=0 
  412. $adjpegq%>100 
  413. .1e=1:error$=m$(22)+m$(25)+m$(23)+m$(27)+m$(24)
  414. $admode%,1)<"A" 
  415.  dest%=1 
  416.  &35,
  417. $admode%,0 
  418.  ;flag%
  419. $admode%=0 flag%=2
  420. $admode%>127 
  421. $admode%<256 flag%=2
  422.  (flag%
  423. 2)>0 
  424. 51e=2:error$=m$(22)+m$(26)+m$(23)+m$(13)+m$(24)
  425.  Drag,,-1:!buffer%=e:$(buffer%+4)=error$+
  426.  "Wimp_ReportError",buffer%,%01,m$(20) 
  427.  A%=2 
  428. removearea:
  429.  "Wimp_CloseDown":
  430. ChangeFSISuffix
  431. safe%=
  432. geticonstate(scalew%,1) A$+=" "+
  433.  tofitx+": "+
  434.  tofity+":":safe%=
  435. geticonstate(scalew%,5) A$+=" 1:2":safe%=
  436. geticonstate(scalew%,4) A$+=" 1:2 1:1":safe%=
  437. geticonstate(scalew%,3) A$+=" 1:1 1:2":safe%=
  438. geticonstate(scalew%,9) 
  439. safe%=
  440. $s%(0) A$+=" "+$s%(0) 
  441.  A$+=" 1"
  442. A$+=":"+$s%(1)
  443. $s%(2) A$+=" "+$s%(2) 
  444.  A$+=" 1"
  445. A$+=":"+$s%(3)
  446. geticonstate(scalew%,0) A$+=" -nosize"
  447. geticonstate(scalew%,18) A$+=" -noscale"
  448. geticonstate(scalew%,19) A$+=" -lock"
  449. geticonstate(scalew%,6) 
  450. OHsafe%=
  451. geticonstate(scalew%,16) A$+=" -rotate" 
  452.  A$+=" -rotate-"
  453. geticonstate(scalew%,7) A$+=" -hflip":safe%=
  454. geticonstate(scalew%,8) A$+=" -vflip":safe%=
  455. geticonstate(proc%,0) A$+=" -range":safe%=
  456. geticonstate(proc%,1) A$+=" -equal":safe%=
  457. geticonstate(proc%,2) A$+=" -nodither"
  458. geticonstate(proc%,3) A$+=" -invert":safe%=
  459. geticonstate(proc%,4) A$+=" -brighten"
  460. geticonstate(proc%,5) A$+=" -black"+$p%(0)
  461. geticonstate(proc%,6) A$+=" -gamma"+
  462. locale_convert($p%(1),decimal_point$,"."):safe%=
  463. geticonstate(proc%,7) A$+=" -sharpen"+$p%(2):safe%=
  464. geticonstate(proc%,11) A$+=" -smooth"+$p%(3)
  465. checkandfinish
  466.  saved% 
  467. sprite% 
  468. removearea:
  469.  "Wimp_CloseDown":
  470. _-!buffer%=
  471. :$(buffer%+4)=m$(2)+F$+m$(3)+
  472.  "Wimp_ReportError",buffer%,%10111,m$(20) 
  473.  A%=1 
  474. removearea:
  475.  "Wimp_CloseDown":
  476. key(handle%,icon%,key%)
  477.  key%=&1b 
  478.  CrMenu,,-1:
  479.  handle% 
  480.  zoom%:
  481.  key% 
  482. dozoom(icon%-4,0):
  483.  icon%=4 
  484.  &400d2,zoom%,5,,,-1,
  485. $z%(0)
  486.  icon%=5 
  487.  CrMenu,,-1
  488.  &18e,&18f:
  489. dozoom(icon%-4,0)
  490.  &400d2,zoom%,icon%
  491. 1,,,-1,
  492. $z%(icon%
  493.  save%
  494.  key%=13 
  495. savesprite:
  496.  output%
  497.  icon%=34 
  498. geticonstate(output%, 24) 
  499. $admode% = $oldmode%:!q%=output%:q%!4=20:q%!8=0:q%!12=0:
  500.  SetI,,q%
  501. showscaletofit
  502.  key%=13 
  503.  CrMenu,,-1:
  504.  key%=&18e 
  505.  icon% 
  506.  19:icon%=34:key%=oldmode%
  507.  34:icon%=22:key%=adjpegq%
  508.  22:icon%=19:key%=adspcl%
  509.  key%=&18f 
  510.  icon% 
  511.  22:icon%=34:key%=oldmode%
  512.  34:icon%=19:key%=adspcl%
  513.  19:icon%=22:key%=adjpegq%
  514.  key%>1024 
  515.  &400d2,output%,icon%,,,-1,
  516. $key%:
  517.  proc%:
  518.  key% 
  519.  &18e,13:icon%+=1:
  520.  icon%>10 icon%=8:
  521.  key%=13 
  522.  CrMenu,,-1:
  523.  &400d2,proc%,icon%,,,-1,
  524. $p%(icon%-8):
  525.  &18f:icon%-=1:
  526.  icon%<8 icon%=10
  527.  &400d2,proc%,icon%,,,-1,
  528. $p%(icon%-8):
  529.  scalew%:
  530.  key% 
  531.  &18e,13:icon%+=1:
  532.  icon%>13 icon%=10:
  533.  key%=13 
  534.  CrMenu,,-1:
  535.  &400d2,scalew%,icon%,,,-1,
  536. $s%(icon%-10):
  537.  &18f:icon%-=1:
  538.  icon%<10 icon%=13
  539.  &400d2,scalew%,icon%,,,-1,
  540. $s%(icon%-10):
  541.  "Wimp_ProcessKey",key%
  542. savesprite
  543.  F$=$adsave% 
  544.  Drag,,-1:!buffer%=3:$(buffer%+4)=m$(28)+
  545.  "Wimp_ReportError",buffer%,%11,m$(20) 
  546.  A%=2 
  547.  CrMenu,,-1
  548.  jpegsave% 
  549. "OS_File",10,$adsave%,&c85,,sar%,sar%+jpegsize%
  550.  spop%,&10C,sar%,$adsave%
  551.  CrMenu,,-1
  552. checkmouse(mousex%,mousey%,b%,handle%,icon%,ob%)
  553.  moved%:moved%=
  554.  handle% 
  555.  pic%:
  556. domenu(pic%,m$(4)+">sinfo%,"+m$(5)+">srcinfo%,"+m$(6)+">raninfo%,"+m$(7)+">zoom%,"+m$(8)+">save%,"+m$(9),m$(20))
  557. domenu(101,m$(10)+">infow%,"+m$(11)+">scalew%,"+m$(12)+">proc%,"+m$(13)+">output%:dest%,"+m$(27)+">jpego%:1-dest%,"+m$(9)+","+m$(14)+":fast%AND1,"+m$(15)+","+m$(16),m$(20))
  558. rmenuhandle%=handle%
  559.  handle% 
  560.  zoom%:
  561.  icon% 
  562. dozoom(0,1)
  563. dozoom(0,-1)
  564. dozoom(1,1)
  565. dozoom(1,-1)
  566.  handle% 
  567.  zoom%:
  568.  icon% 
  569. dozoom(0,-1)
  570. dozoom(0,1)
  571. dozoom(1,-1)
  572. dozoom(1,1)
  573.  handle% 
  574.  output%:
  575.  dest%=0 dest%=1:
  576. domenu(101,m$(10)+">infow%,"+m$(11)+">scalew%,"+m$(12)+">proc%,"+m$(13)+">output%:dest%,"+m$(27)+">jpego%:1-dest%,"+m$(9)+","+m$(14)+":fast%AND1,"+m$(15)+","+m$(16),m$(20)):
  577.  Getcaret%,,q%:moved%=
  578.  icon% 
  579.  3,4,5,6:
  580. killcurrent(
  581. (22+icon%)):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  582.  SetI,,q%:q%!4=24:
  583.  SetI,,q%
  584. killcurrent("S16,90,90"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  585.  SetI,,q%:q%!4=24:
  586.  SetI,,q%
  587. killcurrent("S32,90,90"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  588.  SetI,,q%:q%!4=24:
  589.  SetI,,q%
  590. killcurrent("0"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  591.  SetI,,q%:q%!4=24:
  592.  SetI,,q%
  593. killcurrent("8"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  594.  SetI,,q%:q%!4=24:
  595.  SetI,,q%
  596. killcurrent("12"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  597.  SetI,,q%:q%!4=24:
  598.  SetI,,q%
  599. killcurrent("15"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  600.  SetI,,q%:q%!4=24:
  601.  SetI,,q%
  602. killcurrent("S16,90,45"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  603.  SetI,,q%:q%!4=24:
  604.  SetI,,q%
  605. killcurrent("S32,90,45"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  606.  SetI,,q%:q%!4=24:
  607.  SetI,,q%
  608. killcurrent(
  609. deducemode):
  610.  SetI,,q%:
  611.  Caretpos%,output%,19,,,-1,
  612. ($adspcl%):!q%=output%:q%!4=7:q%!8=0:q%!12=1<<22:
  613.  SetI,,q%:q%!4=8:
  614.  SetI,,q%:q%!4=13:
  615.  SetI,,q%:q%!4=14:
  616.  SetI,,q%
  617. killcurrent(
  618. deducemode):!q%=output%:q%!4=7:q%!8=0:q%!12=1<<22:
  619.  SetI,,q%:q%!4=8:
  620.  SetI,,q%:q%!4=13:
  621.  SetI,,q%:q%!4=14:
  622.  SetI,,q%
  623. killcurrent(
  624. deducemode):!q%=output%:q%!4=7:q%!8=1<<22:q%!12=1<<22:
  625.  SetI,,q%:q%!4=8:
  626.  SetI,,q%:q%!4=13:
  627.  SetI,,q%:q%!4=14:
  628.  SetI,,q%
  629. $admode%,1) = "S" 
  630. $admode%,2) = "45" 
  631. killcurrent("15"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  632.  SetI,,q%:q%!4=24:
  633.  SetI,,q%
  634. killcurrent("28"):!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  635.  SetI,,q%:q%!4=24:
  636.  SetI,,q%
  637.  18:!q%=output%:q%!4=24:q%!8=0:q%!12=1<<21:
  638.  SetI,,q%
  639.  24:!q%=output%:q%!4=18:q%!8=0:q%!12=1<<21:
  640.  SetI,,q%:
  641. killcurrent(
  642. deducemode):
  643.  Caretpos%,output%,34,,,-1,
  644. ($oldmode%)
  645.  moved% 
  646.  Caretpos%,output%,q%!4,q%!8,q%!12,q%!16,q%!20
  647.  moved% 
  648.  Caretpos%,output%,q%!4,q%!8,q%!12,q%!16,q%!20
  649. geticonstate(output%,18) $admode%=
  650. deducemode
  651. 2!q%=output%:q%!4=20:q%!8=0:q%!12=0:
  652.  SetI,,q%
  653. showscaletofit
  654.  save%:
  655.  icon% 
  656. savesprite
  657.  sprite% 
  658. getw(pic%):
  659. open_window(pic%,x0%,y0%,x1%,y1%,scx%,scy%,-1)
  660.  jpego%:
  661.  dest%=1 
  662.  Getcaret%,,q%
  663. dest%=0:
  664. domenu(101,m$(10)+">infow%,"+m$(11)+">scalew%,"+m$(12)+">proc%,"+m$(13)+">output%:dest%,"+m$(27)+">jpego%:1-dest%,"+m$(9)+","+m$(14)+":fast%AND1,"+m$(15)+","+m$(16),m$(20))
  665.  icon%=5 
  666.  Caretpos%,jpego%,q%!4,q%!8,q%!12,q%!16,q%!20
  667.  icon% 
  668. $adjpegq%=
  669. $adjpegq%-1) 
  670. $adjpegq%=
  671. $adjpegq%+1)
  672. $adjpegq%<0 $adjpegq%="0"
  673. $adjpegq%>100 $adjpegq%="100"
  674. 0!q%=jpego%:q%!4=5:q%!8=0:q%!12=0:
  675.  SetI,,q%
  676.  Caretpos%,jpego%,5,,,-1,
  677. $adjpegq%
  678. $adjpegq%=
  679. $adjpegq%+1) 
  680. $adjpegq%=
  681. $adjpegq%-1)
  682. $adjpegq%<0 $adjpegq%="0"
  683. $adjpegq%>100 $adjpegq%="100"
  684. 0!q%=jpego%:q%!4=5:q%!8=0:q%!12=0:
  685.  SetI,,q%
  686.  Caretpos%,jpego%,5,,,-1,
  687. $adjpegq%
  688.  handle% 
  689.  save%:
  690.  icon% 
  691. getw(save%)
  692.  !q%=save%:q%!4=0:
  693.  GetI,,q%
  694. ?!q%=save%:q%!4=5:q%!8+=bx%:q%!12+=by%:q%!16+=bx%:q%!20+=by%
  695. 3q%!24=0:q%!28=0:q%!32=&7FFFFFFF:q%!36=&7FFFFFFF
  696. +t$="file_ff9":
  697.  jpegsave% t$="file_c85"
  698.  dstart% 
  699.  dstart%,%11000101,1,t$,q%+8,q%+24 
  700.  "Wimp_DragBox",,q%
  701. dozoom(s%,a%)
  702.  s%=0 
  703. /$z%(0)=
  704. $z%(0)+a%):
  705. $z%(0)="0" $z%(0)="1"
  706. /$z%(1)=
  707. $z%(1)+a%):
  708. $z%(1)="0" $z%(1)="1"
  709. 2!q%=zoom%:q%!4=4+s%:q%!8=0:q%!12=0:
  710.  SetI,,q%
  711.     /!q%=pic%:
  712.  GetW,,q%:f%=q%!28:
  713.  &400c3,,q%
  714. pic%=
  715. create_window(x,y,F$)
  716. popup(pic%,f%)
  717. domenu(handle%,menu$,menutitle$)
  718. menuhandle%=handle%
  719. %menuptr%=buffer%:indirect%=idata%
  720. menuptr%!20=44
  721. $menuptr%=menutitle$
  722. ;menuptr%?12=7:menuptr%?13=2:menuptr%?14=7:menuptr%?15=0
  723. !menuptr%!16=200:menuptr%!24=0
  724. menuptr%+=28
  725.  i1%=i%+1:i%=
  726. menu$+",",",",i1%)
  727. 8item$=
  728. menu$,i1%,i%-i1%):
  729. menuitem(item$):
  730.  item$=""
  731. #menuptr%!-24=(menuptr%!-24)
  732.  handle%=101 
  733.  CrMenu,,buffer%,mousex%-64,96+9*44 
  734.  CrMenu,,buffer%,mousex%-32,mousey%+16
  735. menuitem(text$)
  736.  text$="" 
  737. +flg%=0:submenu%=-1:I%=
  738. text$,":"):
  739. *flg%=
  740. text$,I%+1):text$=
  741. text$,I%-1)
  742. text$,">"):
  743. !.submenu%=
  744. text$,I%+1):text$=
  745. text$,I%-1)
  746. menuptr%!0=flg%
  747. menuptr%!4=submenu%
  748. (text$=m$(9)
  749. (F$="" 
  750.  F$="SpriteFile" 
  751.  F$="JPEGImage")) 
  752.  (text$=m$(14)
  753. vram%) 
  754. menuptr%!8=&07400021
  755. menuptr%!8=&07000021
  756.  text$*16+8>buffer%!16 buffer%!16=
  757.  text$*16+8
  758.  text$>12 
  759. ,Cmenuptr%!8=menuptr%!8 
  760.  256:menuptr%!20=
  761.  text$+1:menuptr%!16=0
  762. -?menuptr%!12=indirect%:$indirect%=text$:indirect%+=
  763.  text$+2
  764. $(menuptr%+12)=text$
  765. menuptr%+=24
  766. menuselect(menus%)
  767.  GetP,,paltemp%:adjust%=paltemp%!8 
  768.  DcMenu,,buffer%,menus%,
  769. 200," ")
  770. ,,,a$
  771.  a$="" 
  772.  menuhandle% 
  773.  pic%
  774.  m$(9):
  775. callFSI
  776.  m$(14):fast%=
  777. fast%
  778.  m$(27):dest%=0
  779.  m$(13):dest%=1
  780.  m$(9):
  781. callFSI
  782.  m$(15)
  783. CGstatescale%=0:
  784.  I%=0
  785. 9:statescale%+=
  786. geticonstate(scalew%,I%)<<I%:
  787.  I%=10
  788. 13:statescale%+=
  789. geticonstate(scalew%,I%+6)<<I%:
  790. ECstateproc%=0:
  791.  I%=0
  792. 7:stateproc%+=
  793. geticonstate(proc%,I%)<<I%:
  794. FJstateoutput%=0:
  795.  I%=0
  796. 26:stateoutput%+=
  797. geticonstate(output%,I%)<<I%:
  798. GDstatejpeg%=0:
  799.  I%=0
  800. 3:statejpeg%+=
  801. geticonstate(jpego%,I%)<<I%:
  802. H!A%=
  803. "<ChangeFSI$Dir>.Choices"
  804. #A%,fast%,dest%,statescale%,stateproc%,stateoutput%,statejpeg%,$adjpegq%,$oldmode%
  805. #A%,$p%(0),
  806. locale_convert($p%(1),decimal_point$,"."),$p%(2),$p%(3),$admode%,$adspcl%
  807. #A%,$s%(0),$s%(1),$s%(2),$s%(3)
  808.  m$(16):
  809. checkandfinish
  810.  adjust% 
  811. checkmouse(0,0,2,rmenuhandle%,0,0)
  812. create_window(x,y,title$)
  813. S-x=x*
  814. $z%(0)
  815. $z%(1):y=y*
  816. $z%(0)
  817. $z%(1)
  818. T !z%=0:z%!4=-y:z%!8=x:z%!12=0
  819. U$z%!40=0:z%!44=-y:z%!48=x:z%!52=0
  820.  x<128 
  821.  y<128 z%?35=0 
  822.  z%?35=255
  823. W)$adtitle%="":
  824.  CreateW,,z% 
  825.  handle%
  826. $adtitle%=title$
  827. =handle%
  828. popup(handle%,f%)
  829.  "OS_ReadModeVariable",-1,4 
  830.  ,,modexshift%
  831.  "OS_ReadModeVariable",-1,5 
  832.  ,,modeyshift%
  833.  "OS_ReadModeVariable",-1,11 
  834.  ,,rightscr%
  835.  "OS_ReadModeVariable",-1,12 
  836.  ,,topscr%
  837. _Arightscr%=rightscr%<<modexshift%:topscr%=topscr%<<modeyshift%
  838. getw(handle%)
  839. a9xo%=rightscr%/2-(x0%+x1%)/2:yo%=topscr%/2-(y0%+y1%)/2
  840. open_window(handle%,x0%+xo%,y0%+yo%,x1%+xo%,y1%+yo%,scx%,scy%,f%)
  841. open_window(handle%,x0%,y0%,x1%,y1%,scx%,scy%,bhandle%)
  842.  handle%=-1
  843. q%!0=handle%:q%!28=bhandle%
  844. g)q%!4=x0%:q%!8=y0%:q%!12=x1%:q%!16=y1%
  845. q%!20=scx%:q%!24=scy%
  846.  OpenW,,q%
  847. getw(handle%)
  848. !q%=handle%:
  849.  GetW,,q%
  850. info(q%+4):bhandle%=q%!28:flags%=q%!32
  851. info(q%)
  852. p=x0%=!q%:y0%=q%!4:x1%=q%!8:y1%=q%!12:scx%=q%!16:scy%=q%!20
  853. bx%=x0%-scx%:by%=y1%-scy%
  854. redraw_window(handle%)
  855.  handle%=pic% 
  856. u?!factors%=!ifactors%*
  857. $z%(0):factors%!4=ifactors%!4*
  858. $z%(0)
  859. vCfactors%!8=ifactors%!8*
  860. $z%(1):factors%!12=ifactors%!12*
  861. $z%(1)
  862. reduce(!factors%,factors%!8):
  863. reduce(factors%!4,factors%!12)
  864. !q%=handle%
  865.  RedrawW,,q% 
  866.  more%
  867. info(q%+4):by%=by%-
  868. $z%(0)
  869. $z%(1))
  870.  more%
  871.  jpegsave% 
  872.  jpegpaint% 
  873.  jpegpaint%,sar%,bx%,by%,factors%,jpegsize%,1 
  874. 1)=0 
  875.  spopx%,&134,sar%,n$,bx%,by%,,factors%,spx%
  876.  GetR%,0,q% 
  877.  more%
  878. geticonstate(handle%,icon%)
  879. &!q%=handle%:q%!4=icon%:
  880.  GetI,,q%
  881. =q%!24>>21 
  882. getmodeinfo
  883.  jpegsave% 
  884. &35,-1,4 
  885. ,,nx:
  886. &35,-1,5 
  887. =!ifactors%=1:ifactors%!4=1:ifactors%!8=nx:ifactors%!12=ny
  888. "XWimp_ReadPixTrans",&100,sar%,n$,,,,ifactors%,pixtrans%
  889.  spopx%,&118,sar%,n$ 
  890.  ,,sptr%
  891.  sptr%!32=44 
  892. palptr%=0
  893.  grab%=0 
  894.  2048-8 
  895.  8:paltemp%!(grab%>>1)=sptr%!(grab%+44):
  896. palptr%=paltemp%
  897.  Q%=0
  898. 255:pixtrans%?Q%=Q%:
  899.  sptr%!32=44+2048 
  900.  Q%=0
  901.  ctran%,palptr%!(Q%<<2)
  902. pixtrans%?Q%:
  903.  "ColourTrans_SelectTable",m,palptr%,-1,-1,pixtrans%
  904. 8spx%=-1:
  905.  Q%=0
  906.  pixtrans%?Q%<>Q% spx%=pixtrans%
  907. deducemode
  908.  m,x,y
  909. geticonstate(output%,21) 
  910. geticonstate(output%,17) 
  911. ="JPEG8" 
  912. ="JPEG24"
  913. geticonstate(output%,18) 
  914.  &6,135 
  915. &35,-1,9 
  916.  m>3 
  917. &35,-1,4 
  918. &35,-1,5 
  919. x=180/(2^x):y=180/(2^y)
  920. ="S"+
  921. (2^m)+","+
  922.  x+","+
  923. geticonstate(output%,24) 
  924. =$oldmode%
  925. =$admode%
  926. showscaletofit
  927.  m,x,y
  928. $admode%=
  929. deducemode
  930.  ?admode% 
  931. $admode%,5)>
  932. $admode%,8) x=6 
  933. $admode%,2)>16 x+=5 
  934.  x+=4
  935. &35,-1,11 
  936. ,,tofitx:
  937. &35,-1,12 
  938. ,,tofity
  939. &35,-1,11 
  940. ,,tofitx:
  941. &35,-1,12 
  942. ,,tofity
  943. $admode%
  944. &35,m,11 
  945. ,,tofitx:
  946. &35,m,12 
  947. ,,tofity
  948. &35,m,4 
  949. &35,m,5 
  950.  y>x x=6 
  951. &35,m,9 
  952. ,,y:x+=y
  953. Atofitx+=1:tofity+=1:$adscale%=m$(17)+
  954.  tofitx+m$(18)+
  955.  tofity
  956. @q%!12=1<<21:!q%=output%:
  957.  I%=0
  958.  I%=x q%!8=1<<21 
  959.  q%!8=0
  960. =q%!4=I%+3:
  961.  SetI,,q%:
  962.  x=12 q%!8=0:q%!4=24:
  963.  SetI,,q%
  964. killcurrent(m$)
  965. "q%!12=1<<21:!q%=output%:q%!8=0
  966. q%!4=20:
  967.  SetI,,q%
  968. $admode%=m$
  969. ZS(I%)
  970.  A$+=
  971. ?I%:I%+=1:
  972. ?I%<14:=A$
  973. errorbox
  974.  Drag,,-1:!buffer%=
  975. :$(buffer%+4)=
  976. $+" (code "+
  977. +")"+
  978.  "Wimp_ReportError",buffer%,%11,m$(20) 
  979.  A%=2 
  980. removearea:
  981.  "Wimp_CloseDown":
  982. ChangeFSI(A$,spritearea%,workspace%,worklimit%,oksave%,okinfo%,
  983.  ram%,fast%)
  984.  A$(),r%(),g%(),b%(),rpal%(),gpal%(),bpal%(),table%(),cl%(),xl%(),xl2%()
  985.  xp%(),rm%(),rm1%(),rm2%(),vals%(),nl%(),A%(),B%(),new%(),st%(),jpq%(),m
  986. A$,1)<>" "
  987.  A$<>0 A$=
  988. A$,2):
  989. A$,1)=" " A$=
  990. A$,2):
  991. A$,1)=" " A$=
  992. A$,5))="-QUIT" 
  993. A$,7):
  994. A$,1)<>" "
  995.  A$<>0 A$=
  996. A$,2):
  997. A$,1)=" " A$=
  998. A$,2):
  999.  A$(100):ARG%=0:B%=
  1000. A$," ")
  1001.  B%<>0
  1002. +ARG%+=1:A$(ARG%)=
  1003. A$,B%-1):A$=
  1004. A$,B%+1)
  1005. A$,1)=" ":A$=
  1006. A$,2):
  1007. A$," ")
  1008.  A$<>"" ARG%+=1:A$(ARG%)=A$
  1009. Xinvert%=
  1010. :range%=
  1011. :sharpen%=
  1012. :info%=
  1013. :cache%=
  1014. :cacheareanumber%=0:dither%=
  1015. :black%=
  1016. Chist%=
  1017. :equal%=
  1018. :vflip%=
  1019. :hflip%=
  1020. :scale%=
  1021. :scaleo%=
  1022. :scrapf%=
  1023. 6gamma=1:rotate%=
  1024. :max%=20000000:bright%=15:lock%=
  1025. rwt=.299:gwt=.587:bwt=.114
  1026.  ARG%<3 
  1027. "ChangeFSI interactive input (read FSIinfo for command line details)"
  1028. "Source file: "s$,"Destination file: "f$,"Output mode: "m$
  1029. "(X)Scale (e.g. 2:1): "xs$:
  1030. "Y Scale: "ys$
  1031. "Info on input picture?"a$:
  1032. a$,1))="Y" info%=
  1033. "Invert picture colours?"a$:
  1034. a$,1))="Y" invert%=
  1035. "Compute histogram of input?"a$:
  1036. a$,1))="Y" hist%=
  1037. "Apply histogram equalisation?"a$:
  1038. a$,1))="Y" equal%=
  1039. "Expand input dynamic range?"a$:
  1040. a$,1))="Y" range%=
  1041. :equal%=
  1042. "Sharpen picture by (e.g. 12 for harsh, 24 for soft) "a$
  1043.  a$<>"" sharpen%=
  1044. "Rotate?"a$:
  1045. a$,1))="Y" rotate%=1
  1046. scale%=
  1047. :scaleo%=
  1048. :fast%=
  1049.  A%=ARG%
  1050. uc(A$(ARG%))="-INFO" info%=
  1051. :A$(ARG%)="":ARG%-=1
  1052. uc(A$(ARG%))="-HIST" hist%=
  1053. :A$(ARG%)="":ARG%-=1
  1054. uc(A$(ARG%))="-LOCK" lock%=
  1055. :A$(ARG%)="":ARG%-=1
  1056. uc(A$(ARG%))="-EQUAL" equal%=
  1057. :range%=
  1058. :A$(ARG%)="":ARG%-=1
  1059. uc(A$(ARG%))="-RANGE" range%=
  1060. :equal%=
  1061. :A$(ARG%)="":ARG%-=1
  1062. uc(A$(ARG%))="-INVERT" invert%=
  1063. :A$(ARG%)="":ARG%-=1
  1064. uc(A$(ARG%))="-NOSCALE" scale%=
  1065. :scaleo%=
  1066. :A$(ARG%)="":ARG%-=1
  1067. uc(A$(ARG%))="-NOSIZE" scale%=
  1068. :A$(ARG%)="":ARG%-=1
  1069. uc(A$(ARG%))="-NODITHER" dither%=
  1070. :A$(ARG%)="":ARG%-=1
  1071. uc(A$(ARG%))="-BRIGHTEN" bright%=16:A$(ARG%)="":ARG%-=1
  1072. uc(A$(ARG%))="-ROTATE" rotate%=1:A$(ARG%)="":ARG%-=1
  1073. uc(A$(ARG%))="-ROTATE-" rotate%=-1:A$(ARG%)="":ARG%-=1
  1074. uc(A$(ARG%))="-VFLIP" vflip%=
  1075. :A$(ARG%)="":ARG%-=1
  1076. uc(A$(ARG%))="-HFLIP" hflip%=
  1077. :A$(ARG%)="":ARG%-=1
  1078. uc(A$(ARG%))="-NOMODE" fast%=
  1079. :A$(ARG%)="":ARG%-=1
  1080. A$(ARG%),6))="-BLACK" 
  1081. Jblack%=32:
  1082.  A$(ARG%)>6 black%=
  1083. A$(ARG%),7):
  1084.  black%>128 black%=128
  1085. A$(ARG%)="":ARG%-=1
  1086. A$(ARG%),6))="-GAMMA" 
  1087. 1gamma=2.2:
  1088.  A$(ARG%)>6 gamma=
  1089. A$(ARG%),7)
  1090. A$(ARG%)="":ARG%-=1
  1091. A$(ARG%),8))="-SHARPEN" 
  1092. 6sharpen%=24:
  1093.  A$(ARG%)>8 sharpen%=
  1094. A$(ARG%),9)
  1095. A$(ARG%)="":ARG%-=1
  1096. A$(ARG%),7))="-SMOOTH" 
  1097. 7sharpen%=-1:
  1098.  A$(ARG%)>7 sharpen%=-
  1099. A$(ARG%),8)
  1100. 3A$(ARG%)="":ARG%-=1:
  1101.  sharpen%<-23 sharpen%=-23
  1102. A$(ARG%),4))="-RED" rwt=
  1103. A$(ARG%),5):A$(ARG%)="":ARG%-=1
  1104. A$(ARG%),6))="-GREEN" gwt=
  1105. A$(ARG%),7):A$(ARG%)="":ARG%-=1
  1106. A$(ARG%),5))="-BLUE" bwt=
  1107. A$(ARG%),6):A$(ARG%)="":ARG%-=1
  1108. A$(ARG%),4))="-MAX" 
  1109. Fmax%=
  1110. A$(ARG%),5):
  1111. A$(ARG%),"K")
  1112. A$(ARG%),"k") max%=max%*1024
  1113. A$(ARG%)="":ARG%-=1
  1114.  A%=ARG%
  1115. !2s$=A$(1):f$=A$(2):m$=A$(3):xs$=A$(4):ys$=A$(5)
  1116.  okinfo% 
  1117.  info%=
  1118.  workspace%>=0 
  1119. flex%=
  1120.  worklimit%=0 
  1121.  flex%=
  1122.  flex%=
  1123. :nextlocation%=worklimit%
  1124. )"pnm$=
  1125. uc(m$):
  1126. pnm$+",",3) 
  1127. "AIM":m=-1:m$=""
  1128. "P1,","P4,":m=-2:m$="":spm=18
  1129. "P2,","P5,":m=-2:m$="T":spm=20
  1130. "P3,","P6,":m=-4:pnm$=
  1131. pnm$,2):p6bits=8:I%=
  1132. m$,4):m$=""
  1133.  I%>0
  1134.  I%<8 p6bits=I%
  1135. "P15":m=-3:m$=""
  1136. "C15":m=-5:m$=""
  1137. "IRL":m=-4:m$="":p6bits=8
  1138. "S16":m=-6:m$=""
  1139. "S24":m=-7:m$="":p6bits=8
  1140. "S32":m=-8:m$="":p6bits=8
  1141. "JPE":m$="":p6bits=8:
  1142. pnm$,8)="JPEGMONO" m=-9:jpegquality%=
  1143. pnm$,9) 
  1144.  m=-10:jpegquality%=
  1145. pnm$,5)
  1146.  m$:spm=m:m$=
  1147. m$,1)):
  1148. "CDRT",m$)=0 m$=""
  1149.  xs$="" 
  1150. xs$,1)="-" 
  1151. 9#xmul%=1:xdiv%=1:ymul%=1:ydiv%=1
  1152.  ys$="" ys$=xs$
  1153. <)xmul%=
  1154.  xs$:xdiv%=
  1155. xs$,":")+1)
  1156. =)ymul%=
  1157.  ys$:ydiv%=
  1158. ys$,":")+1)
  1159. ?&flag=-1:
  1160. 8,5,s$ 
  1161.  r0,,r2:dir=r0=2
  1162.  dir 
  1163. ADpanic=
  1164. 8,5,s$+".raw" 
  1165.  r0,,r2:
  1166.  r0=1 s$+=".raw":dir=
  1167. :panic=
  1168.  panic 
  1169. 8,5,s$+".red" 
  1170.  r0,,r2:
  1171.  r0=1 panic=
  1172.  panic 
  1173.  42,"Directory given"
  1174. E>ftype=r2>>8 
  1175.  &FFF:bits=28:F=2^bits:c%=0:cc%=0:ccc%=0:o%=0
  1176.  dir 
  1177. G?c%=
  1178. (s$+".red"):
  1179.  c%=0 
  1180.  42,"Red file "+s$+".red not found"
  1181. HFcc%=
  1182. (s$+".green"):
  1183.  cc%=0 
  1184. 42,"Green file "+s$+".green not found"
  1185. IEccc%=
  1186. (s$+".blue"):
  1187.  ccc%=0 
  1188. 42,"Blue file "+s$+".blue not found"
  1189. K/c%=
  1190.  c%=0 
  1191.  42,"File "+s$+" not found"
  1192. close:
  1193. colourindex=255
  1194. &66f4d 
  1195. ;pcd%
  1196.  ftype 
  1197.  &FF9:flag=0
  1198. uc(s$),".HIP.")
  1199. uc(s$),":HIP.") 
  1200. T flag=300:I%=
  1201. uc(s$),"HIP.")
  1202. s$,I%)="LOP.":cc%=
  1203.  cc%=0 
  1204. 42,"Can't find Lop file "+s$
  1205.  &FF0:
  1206. #c%=0:S$="":
  1207.  I%=1
  1208. 4:S$+=
  1209.  S$="II*"+
  1210. 0 flag=1500:bigendian=
  1211.  S$="MM"+
  1212. 0+"*" flag=1500:bigendian=
  1213.  &DFA:flag=800:
  1214.  dir flag=801
  1215.  &DE2:flag=1000
  1216.  &CBE:flag=3800
  1217.  &BE8:
  1218. (pcd%
  1219. 1)=0 flag=3600
  1220.  &7A0:flag=1200
  1221.  &69d:flag=2000
  1222.  &699:flag=700
  1223.  &698:flag=100
  1224.  &697:flag=1900
  1225.  &691:flag=2600
  1226.  &690:flag=2500
  1227.  &666:flag=666
  1228.  &601:flag=3000
  1229.  &371:flag=3100
  1230.  &300:flag=1300:
  1231.  dir flag=1301
  1232.  4:flag=900:
  1233.  dir flag=901
  1234.  6:flag=950
  1235.  flag=-1 
  1236. #c%=0:S$="":
  1237.  I%=1
  1238. 22:S$+=
  1239. S$,7)="FSIfile" flag=2100
  1240.  flag=-1 
  1241. S$,8)="SIMPLE  " flag=2800
  1242.  flag=-1 
  1243. S$,8))="MERCSOFT"
  1244. S$,8))="SNAPSHOT"flag=902
  1245.  flag=-1 
  1246. S$,8))="MERCSOF1" flag=903
  1247.  flag=-1 
  1248. S$,13))="IRLAM YUV 411" flag=2250
  1249.  flag=-1 
  1250. S$,5)="Irlam" flag=2200
  1251.  flag=-1 
  1252. S$,2)="BM" flag=2400:riffoff%=0
  1253.  flag=-1 
  1254. S$,4)="RIFF" 
  1255. S$,9,8)="RDIBdata" 
  1256. S$,21,2)="BM" flag=2400:riffoff%=20
  1257.  flag=-1 
  1258. S$,4)="GIF8" flag=500
  1259.  flag=-1 
  1260. S$,5)="AV_VO" flag=600
  1261.  flag=-1 
  1262. S$,4)=
  1263. &95 flag=1100
  1264.  flag=-1 
  1265. S$,4)=
  1266. 8 flag=1400
  1267.  flag=-1 
  1268. S$,4)=
  1269. 1 flag=2900
  1270.  flag=-1 
  1271. S$,4)="RIX3" flag=2700
  1272.  flag=-1 
  1273. S$,4)="II*"+
  1274. 0 flag=1500:bigendian=
  1275.  flag=-1 
  1276. S$,4)="MM"+
  1277. 0+"*" flag=1500:bigendian=
  1278.  flag=-1 
  1279. S$,2)=
  1280. &CC flag=2300
  1281.  flag=-1 
  1282. S$,2)="P4"
  1283. S$,2)="P5"
  1284. S$,2)="P6" flag=3300:info$=""
  1285.  flag=-1 
  1286. S$,3)="P15" flag=3400
  1287.  flag=-1 
  1288. S$,3)="PIC" flag=3500
  1289.  flag=-1 
  1290. S$,3)="T-I" flag=3800
  1291.  flag=-1 
  1292. S$,3))="P13" flag=3450
  1293.  flag=-1 
  1294. S$,4)="FORM" 
  1295. S$,9,4)="ILBM" flag=1600
  1296.  flag=-1 
  1297. S$,8)="ALPIAR12" flag=3900:colourindex=4095
  1298.  flag=-1 
  1299. S$,8)="ALPIAR16" flag=3905:colourindex=65535
  1300.  flag=-1 
  1301. S$,7,4)="JFIF" 
  1302.  ftype=&C85 
  1303. *jpegblk%=
  1304. dim(20):
  1305. cachesize(jpegblk%)
  1306.  cache%<
  1307. snb_needdjpeg(c%) 
  1308. #c%:c%=0:X%=
  1309. "Run:djpeg"
  1310. subtask("djpeg -maxmemory 2048 "+s$+" <wimp$scrap2>")
  1311. "XOS_CLI","djpeg -maxmemory 2048 "+s$+" <wimp$scrap2>" 
  1312. subtask("djpeg -maxmemory 2048 "+s$+" <wimp$scrap2>")
  1313. "<wimp$scrap2>":
  1314.  c%=0 
  1315. >scrapf%=
  1316. :flag=3300:info$="JPEG (JFIF) file converted to "
  1317. flag=3700
  1318.  flag=-1 
  1319. S$,5)="btpc " 
  1320. #c%:c%=0:
  1321. subtask("<ChangeFSI$Dir>.btpc "+s$+" <wimp$scrap2>")
  1322. "<wimp$scrap2>":
  1323.  c%=0 
  1324. 7scrapf%=
  1325. :flag=3300:info$="BTPC file converted to "
  1326.  flag=-1 
  1327. #c%=&10:S$="":
  1328.  I%=1
  1329. 9:S$+=
  1330.  S$="MILLIPEDE" flag=200
  1331.  flag=-1 
  1332. #c%=&41:S$="":
  1333.  I%=1
  1334. 8:S$+=
  1335. S$,4)="PNTG" flag=1800:st%=&280
  1336.  flag=-1 
  1337. #c%=196:S$="":
  1338.  I%=1
  1339. 8:S$+=
  1340. S$,4)="PNTG" flag=1800:st%=&2e2
  1341.  flag=-1 
  1342. #c%=522:S$="":
  1343.  I%=1
  1344. 8:S$+=
  1345. &fe flag=1850
  1346.  flag=-1 
  1347. #c%=0:
  1348. #c%=10 
  1349.  C%<6 
  1350.  C%<>1 
  1351. #c%=1 flag=1900
  1352.  flag=-1 
  1353. uc(s$),".PCX.")
  1354. uc(s$),":PCX.")
  1355. s$,4)="/PCX" flag=1900
  1356.  flag=-1 
  1357. uc(s$),".IMAGE.")
  1358. uc(s$),":IMAGE.") flag=400
  1359.  flag=-1 
  1360. s$,4))=".RAW" flag=100
  1361.  flag=-1 
  1362. s$,3))="TGA" flag=2000
  1363.  flag=-1 
  1364. s$,3))="VDA" flag=2000
  1365.  flag=-1 
  1366. uc(s$),".PIC.")
  1367. uc(s$),":PIC.") flag=700
  1368.  flag=-1 
  1369. uc(s$),".IMG.")
  1370. uc(s$),":IMG.")
  1371. s$,4)="/IMG" flag=1400
  1372.  flag=-1 
  1373. uc(s$),".DSP.")
  1374. uc(s$),":DSP.")
  1375. s$,4)="/DSP" flag=1700
  1376.  flag=-1 
  1377. s$,4))="/RGB" flag=3200
  1378.  flag=-1 
  1379. s$,4))="/PCD"
  1380. ftype=&be8)
  1381. ((pcd%
  1382. 1)=1) 
  1383. #c%:c%=0:
  1384. subtask("<ChangeFSI$Dir>.hpcdtoppm -3 -a "+s$+" <wimp$scrap2> { > <ChangeFSI$Dir>.pcdtemp }")
  1385. "<wimp$scrap2>":scrapf%=
  1386. :flag=3300:info$="PhotoCD file converted to "
  1387.  flag=-1 
  1388. close:
  1389.  42,"Sorry: format not recognised - please try again or contact your supplier"
  1390. Cstep24=1:input=8:ham=0:planar%=0:bigendianbits=
  1391. :r$="FN"+
  1392.  flag
  1393. 9compression=0:hpredict%=1:striprows%=-1:cachebytes%=
  1394.  xdiv%=0 
  1395.  ydiv%=0 scale%=
  1396.  r%(colourindex)
  1397.  g%(colourindex),b%(colourindex)
  1398.  flag 
  1399. @quant%=4:
  1400. #c%=4:F%=
  1401. W+&1C:
  1402. #c%=F%:st%=
  1403. W+F%-&20:K%=
  1404. W+F%-&20
  1405.  sm<256 
  1406. 53,sm,3 
  1407.  ,,I%
  1408.  st%=F%+12 
  1409. defpal2 
  1410. ipal(2)
  1411. #c%=F%-16:sx%=(
  1412. W+1)*32:rowbytes%=sx%>>3:input=1
  1413. W+1:I%=
  1414. W:sx%-=31-
  1415.  st%=F%+12 
  1416. defpal4 
  1417. ipal(4)
  1418. #c%=F%-16:sx%=(
  1419. W+1)*16:rowbytes%=sx%>>2:input=2
  1420. !sy%=
  1421. W+1:I%=
  1422. W:sx%-=(31-
  1423.  st%=F%+12 
  1424. defpal16 
  1425. ipal(16)
  1426. #c%=F%-16:sx%=(
  1427. W+1)*8:rowbytes%=sx%>>1:input=4
  1428. !sy%=
  1429. W+1:I%=
  1430. W:sx%-=(31-
  1431.  63,255:
  1432.  st%=F%+12 
  1433. defpal
  1434.  K%>st% K%=st%
  1435.  K%-12-F%=2048 
  1436. I%=255 
  1437. #c%=&38
  1438.  C%=0
  1439. 255:D%=
  1440. 9r%(C%)=
  1441. #c%/255*F:g%(C%)=
  1442. #c%/255*F:b%(C%)=
  1443. #c%/255*F
  1444. ipal63
  1445. #c%=F%-16:sx%=(
  1446. W+1)*4:rowbytes%=sx%:sy%=
  1447. W+1:I%=
  1448. W:sx%-=(31-
  1449. 42,"Not understood RISC OS sprite"
  1450. @r$="FN8":
  1451. 53,sm,4 
  1452.  ,,nx:
  1453. 53,sm,5 
  1454.  ,,ny:nx=1<<nx:ny=1<<ny
  1455.  scale% xmul%=xmul%*nx/2:ymul%=ymul%*ny/2
  1456. Vinfo$="RISC OS sprite, mode "+
  1457.  sm+" "+
  1458.  sx%+" by "+
  1459.  sy%+" pixels, "+
  1460. bits(input)
  1461. bpp%=sm>>>27:
  1462.  bpp% 
  1463.  1:bpp%=1:r$="FN8":
  1464.  st%=F%+12 
  1465. defpal2 
  1466. newropal(2)
  1467.  2:bpp%=2:r$="FN8":
  1468.  st%=F%+12 
  1469. defpal4 
  1470. newropal(4)
  1471.  3:bpp%=4:r$="FN8":
  1472.  st%=F%+12 
  1473. defpal16 
  1474. newropal(16)
  1475.  4:bpp%=8:r$="FN8":
  1476.  st%=F%+12 
  1477. defpal 
  1478. newropal(256)
  1479.  5:bpp%=16:r$="FN16":
  1480.  st%=F%+12 
  1481.  rpal%(255),gpal%(255):step24=2
  1482.  C%=0
  1483. "gpal%(C%)=(C%>>5)<<8 
  1484. +rpal%(C%)=((C%>>2)
  1485. 31)<<16 
  1486. 3)<<11
  1487.  C%=0
  1488. 31:r%(C%)=C%/31*F:
  1489. :g%()=r%():b%()=r%()
  1490.  6:bpp%=32:r$="FN24":
  1491.  st%=F%+12 
  1492. nopal 
  1493. !rbo%=0:gbo%=1:bbo%=2:step24=4
  1494.  8:bpp%=24:r$="FN24":
  1495.  st%=F%+12 
  1496. nopal 
  1497. rbo%=0:gbo%=1:bbo%=2
  1498. 42,"Not understood new format RISC OS sprite bpp"
  1499. (nx=(sm>>1) 
  1500. &1fff:ny=(sm>>14) 
  1501. &1fff
  1502.  scale% xdiv%=xdiv%*nx:ydiv%=ydiv%*ny:xmul%=xmul%*90:ymul%=ymul%*90
  1503. #c%=F%-16:rowbytes%=(
  1504. W+1)*4:sy%=
  1505. W+1:I%=
  1506. W:sx%=(rowbytes%*8-(31-
  1507. W))/bpp%:input=bpp%
  1508. Linfo$="New RISC OS sprite, "+
  1509.  sx%+" by "+
  1510.  sy%+" pixels, "+
  1511. bits(input)
  1512.  bpp%=32 input=24
  1513. #c%=st%:cache%=
  1514. Equant%=8:
  1515. #c%=0:sx%=
  1516. HW:sy%=
  1517. nopal:input=24:rowbytes%=sx%*3+2
  1518.     5rbo%=2:gbo%=2+sx%:bbo%=2+2*sx%:r$="FN24":cache%=
  1519. Linfo$="QRT .raw image, "+
  1520.  sx%+" by "+
  1521.  sy%+" pixels, 24 bits per pixel"
  1522. Gquant%=8:
  1523. #c%=5:sx%=
  1524. HW:sy%=
  1525. HW:sx%=(
  1526. HW-sx%+2)/2:sy%=(
  1527. HW-sy%+2)/2
  1528. #c%=&1a:cadsoft%=
  1529. #c%=&200
  1530.  C%=0
  1531. 255:r%(C%)=
  1532. #c%/255*F:
  1533.  C%=0
  1534. 255:g%(C%)=
  1535. #c%/255*F:
  1536.  C%=0
  1537. 255:b%(C%)=
  1538. #c%/255*F:
  1539. #c%=&600:st%=&600:cache%=
  1540.  cadsoft%=2 
  1541. Crep%=0:r$="FN1100":plbuff%=
  1542. dim(sx%):plbytes%=sx%:cachebytes%=
  1543. r$="FN8":rowbytes%=sx%
  1544. ^info$="Cadsoft type "+
  1545.  cadsoft%+" image, "+
  1546.  sx%+" by "+
  1547.  sy%+" pixels, 8 bits per pixel"
  1548. Iquant%=5:
  1549. #c%=&2c:st%=
  1550. W+(&38-&2c):
  1551. #cc%=&2c:stcc%=
  1552. W1(cc%)+(&38-&2c)
  1553. #c%=&1c:sx%=(
  1554. W+1)*4:sy%=
  1555. #c%=st%:
  1556. #cc%=stcc%
  1557.  rpal%(255),gpal%(255):input=16:cache%=
  1558. :rowbytes%=sx%
  1559.  C%=0
  1560. .rpal%(C%)=C%
  1561. 64)<<2 
  1562. &38)<<13
  1563. Sgpal%(C%)=(C%
  1564. 4)<<1
  1565.  ((C%
  1566. 3)<<1
  1567. &60)>>2)<<8 
  1568. 128)>>3)<<16
  1569.  C%=0
  1570. 31:r%(C%)=C%/31*F:
  1571. :g%()=r%():b%()=r%()
  1572. +pbuff%=
  1573. dim(sx%):
  1574.  scale% ymul%=ymul%*2
  1575.  Iinfo$="ArVis image, "+
  1576.  sx%+" by "+
  1577.  sy%+" pixels, 15 bits per pixel"
  1578. "Equant%=8:
  1579. #c%=0:sx%=
  1580. beHW:sy%=
  1581. beHW:X%=
  1582. beHW:st%=
  1583. #c%+X%:
  1584. #c%=st%
  1585. #Vplbuff%=
  1586. dim(sx%*3):plbytes%=sx%*3:rb%=plbuff%:gb%=plbuff%+1:bb%=plbuff%+2:rbo%=-1
  1587. nopal:input=24:rep%=0:cachebytes%=
  1588. :cache%=
  1589. :step24=3
  1590. %`info$="RT image. run length encoded image, "+
  1591.  sx%+" by "+
  1592.  sy%+" pixels, 24 bits per pixel"
  1593. ',compression=5:
  1594. #c%=6:GIFsx=
  1595. HW:GIFsy=
  1596. (8GIF=
  1597. #c%:GIFback=
  1598. #c%:GIFext=
  1599. #c%:quant%=(GIF 
  1600.  7)+1
  1601.  GIF 
  1602.  &80 
  1603.  C%=0
  1604. (1<<quant%)-1
  1605. +9r%(C%)=
  1606. #c%/255*F:g%(C%)=
  1607. #c%/255*F:b%(C%)=
  1608. #c%/255*F
  1609. 1$GIFgcesz=
  1610. #c%+GIFgcesz
  1611.  GIFgcesz=0:I%=
  1612.  I%<>
  1613.  42,"GIF file without , in right place"
  1614.  GIFext<>0 
  1615.  GIFext<>49 
  1616.  GIFext>49 
  1617. 7*xdiv%=xdiv%*64:xmul%=xmul%*(GIFext+15)
  1618. 9*ydiv%=ydiv%*(GIFext+15):ymul%=ymul%*64
  1619. <,GIFleft=
  1620. HW:GIFright=
  1621. HW:sx%=
  1622. HW:sy%=
  1623.  GIFsx<sx% 
  1624.  GIFsy<sy% 
  1625.  info% 
  1626. "GIF file with bigger image inside:"
  1627. "Screen ";GIFsx"x by "GIFsy"y; image "sx%"x by "sy%"y"
  1628. "Continue with monitor's size [Y or y]?"A$
  1629.  A$="Y"
  1630. A$="y" sx%=GIFsx:sy%=GIFsy
  1631. "Continuing with ";sx%"x by "sy%"y"
  1632. F*GIF=
  1633.  GIF 
  1634.  &40 flag=501:r$="FN8"
  1635. GJsetcodes%=
  1636. #c%:clearcode%=1<<setcodes%:st%=
  1637. #c%:cache%=
  1638. :cachebytes%=
  1639.  table%(1<<12):stk%=
  1640. dim(1<<13):buf%=
  1641. dim(280):plbuff%=
  1642. dim(sx%)
  1643.  I%=0
  1644. clearcode%-1:table%(I%)=I%:
  1645. JCinfo$="GIF file, "+
  1646.  sx%+" by "+
  1647.  sy%+" pixels, "+
  1648. bits(quant%)
  1649. L quant%=8:
  1650. #c%=&5c:
  1651.  C%=0
  1652. M9r%(C%)=
  1653. #c%/255*F:g%(C%)=
  1654. #c%/255*F:b%(C%)=
  1655. #c%/255*F
  1656. #c%=&36e:sy%=
  1657. HW:sx%=
  1658. P5st%=&380:
  1659. #c%=st%:rowbytes%=sx%:r$="FN8":cache%=
  1660. QGinfo$=".PIC image, "+
  1661.  sx%+" by "+
  1662.  sy%+" pixels, 8 bits per pixel"
  1663. S$quant%=8:
  1664. #c%=0:a$=
  1665. #c%:st%=
  1666. T!sx%=
  1667.  a$:sy%=
  1668. a$," ")))
  1669. nopal:input=24:step24=3:rowbytes%=sx%*3:r$="FN24"
  1670. V!rbo%=0:gbo%=1:bbo%=2:cache%=
  1671. WLinfo$="MTV .pic image, "+
  1672.  sx%+" by "+
  1673.  sy%+" pixels, 24 bits per pixel"
  1674. Y*sx%=512:sy%=256:
  1675.  scale% ymul%=ymul%*2
  1676. Z4plbuff%=
  1677. dim(sx%):rep%=0:wt%=0:wtsx%=plbuff%+sx%
  1678. cache%=
  1679. :cachebytes%=
  1680.  C%=0
  1681. 255:r%(C%)=(C%
  1682. 63)/63*F:
  1683. :g%()=r%():b%()=r%():quant%=6
  1684. ]Jinfo$="Watford digitiser picture, 512 by 256 pixels, 6 bits per pixel"
  1685. _<sx%=512:sy%=256:input=24:quant%=6:
  1686.  scale% ymul%=ymul%*2
  1687. `0rep1%=0:wt1%=0:rep2%=0:wt2%=0:rep3%=0:wt3%=0
  1688. a=buff%=
  1689. dim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+2*sx%
  1690. b:wtsx1%=buff%+sx%:wtsx2%=buff%+2*sx%:wtsx3%=buff%+3*sx%
  1691.  C%=0
  1692. 255:r%(C%)=(C%
  1693. 63)/63*F:
  1694. :g%()=r%():b%()=r%()
  1695. dRinfo$="Triple Watford digitiser picture, 512 by 256 pixels, 18 bits per pixel"
  1696. f(quant%=8:st%=0:
  1697. #c%=0:
  1698. #c%=65536 
  1699. g8sx%=256:sy%=256:
  1700.  scale% ymul%=ymul%*2:xmul%=xmul%*2
  1701. sx%=512:sy%=512
  1702.  C%=0
  1703. 255:r%(C%)=C%/255*F:
  1704. :g%()=r%():b%()=r%():rowbytes%=sx%:r$="FN8":cache%=
  1705. l?info$="AIM .raw image, 256 by 256 pixels, 8 bits per pixel"
  1706. quant%=4:
  1707. #c%=65536 
  1708. o8sx%=256:sy%=256:
  1709.  scale% ymul%=ymul%*2:xmul%=xmul%*2
  1710. sx%=512:sy%=512
  1711. s=buff%=
  1712. dim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+sx%*2
  1713.  C%=0
  1714. 255:r%(C%)=C%/255*F:
  1715. :g%()=r%():b%()=r%()
  1716. uOinput=24:info$="Hawk V9 Triple image, 256 by 256 pixels, 24 bits per pixel"
  1717. wBquant%=4:
  1718. #c%=8:sx%=
  1719. W:rowbytes%=sx%*3/2:sy%=
  1720. W:st%=20:
  1721. #c%=20
  1722.  scale% ymul%=ymul%*2
  1723. yMplbuff%=
  1724. dim(sx%*3):rb%=plbuff%:gb%=plbuff%+sx%:bb%=plbuff%+sx%*2:rbo%=-1
  1725.  C%=0
  1726. 255:r%(C%)=(C%
  1727. &F)/&F*F:
  1728. :g%()=r%():b%()=r%():cache%=
  1729. {dinput=24:info$="Hawk V9/Snapshot Colour image, "+
  1730.  sx%+" by "+
  1731.  sy%+" pixels, 12 bits per pixel"
  1732. }\quant%=5:
  1733. #c%=8:sx%=
  1734. W:rowbytes%=sx%*2:sy%=
  1735. W:st%=20:
  1736. #c%=20:cache%=
  1737. :r$="FN16":flag=700
  1738.  rpal%(255),gpal%(255):input=16:step24=2
  1739.  C%=0
  1740. "gpal%(C%)=(C%>>5)<<8 
  1741. +rpal%(C%)=((C%>>2)
  1742. 31)<<16 
  1743. 3)<<11
  1744.  C%=0
  1745. 31:r%(C%)=C%/31*F:
  1746. :g%()=r%():b%()=r%()
  1747. ainput=16:info$="Hawk V9 mk II Colour image, "+
  1748.  sx%+" by "+
  1749.  sy%+" pixels, 16 bits per pixel"
  1750. @quant%=8:
  1751. #c%=0:sx%=512:rowbytes%=512:sy%=512:st%=0:flag=900
  1752.  C%=0
  1753. 255:r%(C%)=C%/255*F:
  1754. :g%()=r%():b%()=r%():r$="FN8":cache%=
  1755. Finfo$="Wild Vision V12 image, 512 by 512 pixels, 8 bits per pixel"
  1756.  1000
  1757. Uquant%=4:sx%=640:sy%=256:
  1758. defpal:st%=
  1759. W:r$="FN"+
  1760. (1000+
  1761.  scale% ymul%=ymul%*2
  1762. %buff%=
  1763. dim(sx%):ctable%=
  1764. dim(st%)
  1765. 12,4,c%,ctable%,st%:st%=
  1766. .pa%=ctable%:rep%=0:rep2%=0:pasx%=buff%+sx%
  1767. Ainfo$="ProArtisan image, 640 by 256 pixels, 8 bits per pixel"
  1768.  1100
  1769. @quant%=1:
  1770. #c%=4:sx%=
  1771. beW:sy%=
  1772. beW:input=
  1773. beW:bigendianbits=
  1774. beW:S%=
  1775. Kcache%=
  1776.  S%=2 cachebytes%=
  1777. :info$="Byte Encoded " 
  1778.  info$="":r$="FN8"
  1779.  I%=0
  1780. D%/3-1:r%(I%)=
  1781. #c%/255*F:
  1782.  I%=0
  1783. D%/3-1:g%(I%)=
  1784. #c%/255*F:
  1785.  I%=0
  1786. D%/3-1:b%(I%)=
  1787. #c%/255*F:
  1788.  input 
  1789.  1:r%(0)=F:g%(0)=F:b%(0)=F
  1790.  4,8:
  1791. nopal
  1792. nopal
  1793.  input 
  1794.  1:rowbytes%=(sx%+15>>4)<<1
  1795.  4:rowbytes%=(sx%+3>>2)<<1
  1796.  8:rowbytes%=(sx%+1>>1)<<1
  1797.  24:rowbytes%=(3*sx%+1>>1)<<1:r$="FN24":rbo%=0:gbo%=1:bbo%=2:step24=3
  1798.  S%=1 bbo%=0:rbo%=2
  1799.  42,"Can't do this Sun pixrect"
  1800. Nst%=D%+&20:rep%=0:
  1801.  cachebytes% plbuff%=
  1802. dim(rowbytes%):plbytes%=rowbytes%
  1803. Dinfo$+="Sun image, "+
  1804.  sx%+" by "+
  1805.  sy%+" pixels, "+
  1806. bits(input)
  1807.  1200
  1808. >quant%=8:sx%=800:sy%=800:st%=1600:
  1809. #c%=st%:vflip%=
  1810.  vflip%
  1811. nopal:r$="FN8":rowbytes%=sx%:cache%=
  1812. Iinfo$="TimeStep satellite image, 800 by 800 pixels, 8 bits per pixel"
  1813.  1300
  1814. @quant%=8:sx%=128:sy%=256:st%=0:
  1815. #c%=0:
  1816.  scale% xmul%=xmul%*2
  1817. nopal:r$="FN8":rowbytes%=sx%:cache%=
  1818. @info$="satellite image, 128 by 256 pixels, 8 bits per pixel"
  1819.  1301
  1820. <input=24:quant%=8:sx%=128:sy%=256:
  1821.  scale% xmul%=xmul%*2
  1822. Obuff%=
  1823. dim(sx%*3):rb%=buff%:gb%=buff%+sx%:bb%=buff%+2*sx%:
  1824. nopal:r$="FN901"
  1825. Hinfo$="Triple satellite image, 128 by 256 pixels, 24 bits per pixel"
  1826.  1400
  1827. &planar%=
  1828. #c%=0:Z%=
  1829.  Z%>255 
  1830. +st%=
  1831. beHW*2:planes%=
  1832. beHW:patlen%=
  1833. +pw%=
  1834. beHW:ph%=
  1835. beHW:sx%=
  1836. beHW:sy%=
  1837. Cst%=
  1838. HW*2:input=
  1839. HW:patlen%=
  1840. HW:pw%=
  1841. HW:ph%=
  1842. HW:sx%=
  1843. HW:sy%=
  1844.  scale% 
  1845. #xmul%=xmul%*pw%:xdiv%=xdiv%*282
  1846. #ymul%=ymul%*ph%:ydiv%=ydiv%*282
  1847. Wrowbytes%=sx%+7>>3:pbuff%=
  1848. dim(sx%):plbytes%=rowbytes%*planes%:buff%=
  1849. dim(plbytes%)
  1850. #c%=st%:vrep%=0
  1851.  C%=0
  1852. (1<<planes%)-1:r%(C%)=F-C%/((1<<planes%)-1)*F:
  1853. :g%()=r%():b%()=r%()
  1854. Dinfo$="IMG file, "+
  1855.  sx%+" by "+
  1856.  sy%+" pixels, "+
  1857. bits(planes%)
  1858.  1500
  1859. #c%=4:dir%=
  1860. tiff(4):
  1861. #c%=dir%
  1862. 6rgb=
  1863. :greyunit=100:planar%=1:fillorder=1:resunit=2
  1864. )xnum%=90:xdenom%=1:ynum%=90:ydenom%=1
  1865. tiff(3):
  1866.  Z%=1
  1867. tiff(3):D%=
  1868. tiff(3):C%=
  1869. tiff(4)
  1870.  C%>1 V%=
  1871. tiff(4) 
  1872.  D%=2 
  1873. #c%=dir%+2+Z%*12 
  1874.  D%<4 V%=
  1875. tiff(D%):
  1876. #c%=dir%+2+Z%*12 
  1877. tiff(4)
  1878. "Read tag ";T%" datatype "D%" count "C%" value/pointer "V%
  1879.  256:sx%=V%
  1880.  257:sy%=V%
  1881.  258:
  1882.  C%>1 
  1883.  D%*C%>6 
  1884. #c%=V%:quant%=
  1885. tiff(D%)
  1886. )input=quant%:
  1887.  I%=1
  1888. C%-1:V%=
  1889. tiff(D%)
  1890.  V%<>quant% 
  1891. 42,"Can't do RGB TIFF with different numbers of bits per pixel"
  1892. input+=V%
  1893. nopal
  1894.  quant%=V% 
  1895.  &FF:input=quant%
  1896.  I%=0
  1897. (1<<quant%)-1:r%(I%)=I%/((1<<quant%)-1)*F:
  1898. g%()=r%():b%()=r%()
  1899. #c%=dir%+2+Z%*12
  1900. quant%=V%:input=quant%
  1901.  I%=0
  1902. (1<<quant%)-1:r%(I%)=I%/((1<<quant%)-1)*F:
  1903. g%()=r%():b%()=r%()
  1904.  259:compression=V%
  1905.  262:photometric=V%:
  1906.  V%=0 invert%=
  1907. invert%
  1908.  266:fillorder=V%
  1909.  273:stc%=C%:stv%=V%:std%=D%
  1910.  277:sampperpix%=V%:input=quant%*V%:rgb=V%=3
  1911.  278:striprows%=V%
  1912.  279:stcbyte%=C%:stvbyte%=V%:stdbyte%=D%
  1913.  282:
  1914. #c%=V%:xnum%=
  1915. tiff(4):xdenom%=
  1916. tiff(4)
  1917. #c%=dir%+2+Z%*12
  1918.  283:
  1919. #c%=V%:ynum%=
  1920. tiff(4):ydenom%=
  1921. tiff(4)
  1922. #c%=dir%+2+Z%*12
  1923.  284:planar%=V%:
  1924.  planar%=2 input=quant%
  1925.  290:greyunit=10^V%
  1926.  291:
  1927. #c%=V%:
  1928.  I%=0
  1929. C%-1:r%(I%)=
  1930. tiff(D%)/greyunit/2*F:
  1931. g%()=r%():b%()=r%()
  1932. #c%=dir%+2+Z%*12
  1933.  296:resunit=V%
  1934.  317:hpredict%=V%
  1935.  320:
  1936. #c%=V%:
  1937.  I%=0
  1938. C%/3-1:r%(I%)=
  1939. tiff(3)/65535*F:
  1940.  I%=0
  1941. C%/3-1:g%(I%)=
  1942. tiff(3)/65535*F:
  1943.  I%=0
  1944. C%/3-1:b%(I%)=
  1945. tiff(3)/65535*F:
  1946. #c%=dir%+2+Z%*12
  1947.  info% 
  1948. "Ignoring tag ";T%" datatype "D%" count "C%" value/pointer "V%
  1949.  st%(stc%):
  1950.  stc%>1 
  1951. #c%=stv%:
  1952.  I%=0
  1953. stc%-1:st%(I%)=
  1954. tiff(std%):
  1955. st%(0)=stv%
  1956.  compression 
  1957.  0,1:info$=""
  1958.  2:info$="CCITT Group 3 compressed "
  1959.  5:info$="LZW compressed ":r$="FN1505"
  1960.  hpredict%=2 
  1961.  info$+="horizontal differenced " 
  1962.  hpredict%>2 info$+=" unknown predictor ("+
  1963.  hpredict%+") "
  1964. 'setcodes%=8:clearcode%=1<<setcodes%
  1965.  table%(1<<12):stk%=
  1966. dim(1<<13):buf%=
  1967. dim(280)
  1968.  I%=0
  1969. clearcode%-1:table%(I%)=I%:
  1970.  32773:info$="PackBits compressed ":r$="FN1501"
  1971.  6:info$="JPEG compressed "
  1972.  info$="Compress "+
  1973.  compression+" - unknown "
  1974. Dinfo$+="TIFF file, "+
  1975.  sx%+" by "+
  1976.  sy%+" pixels, "+
  1977. bits(input)
  1978. Tbigendianbits=fillorder=1:
  1979. #c%=st%(0):stripptr=0:
  1980.  striprows%>=sy% striprows%=-1
  1981.  input 
  1982.  1:rowbytes%=sx%+7>>3
  1983.  2:rowbytes%=sx%+3>>2
  1984.  4:rowbytes%=sx%+1>>1
  1985.  8:rowbytes%=sx%
  1986.  24:rowbytes%=3*sx%
  1987.  32:rowbytes%=4*sx%:
  1988.  photometric<>5 
  1989.  42,"32 bpp TIFF but not CMYK"
  1990.  42,"Can't do "+
  1991. bits(input)+" TIFF"
  1992.  planar%=2 rowbytes%=rowbytes%*sampperpix%
  1993.  planar%<>1 
  1994.  rgb<>0 
  1995. 42,"Can't do this style of TIFF yet" 
  1996.  planar%=
  1997.  compression<2 
  1998. Tcache%=
  1999. :stripptr=-1:r$="FN8":
  2000.  input=24 rbo%=0:gbo%=1:bbo%=2:step24=3:r$="FN24"
  2001.  input=32 rbo%=0:gbo%=1:bbo%=2:step24=4:r$="FN24":r%()=F-r%():g%()=F-g%():b%()=F-b%():input=24
  2002.  compression=5 
  2003. compression=32773 
  2004.  -cache%=
  2005. :cachebytes%=rowbytes%*striprows%
  2006. !0plbuff%=
  2007. dim(rowbytes%):rowstogo%=striprows%
  2008.  input=24 rb%=plbuff%:gb%=plbuff%+1:bb%=plbuff%+2:r$="FN"+
  2009. r$,3)+10):step24=3:rbo%=-1
  2010. $.buff%=
  2011. dim(rowbytes%):rowstogo%=striprows%
  2012.  input=24 rb%=buff%:gb%=buff%+1:bb%=buff%+2:r$="FN"+
  2013. r$,3)+10):step24=3
  2014.  scale% 
  2015. S%=resunit:
  2016.  S%=2 S%=90
  2017.  S%=3 S%=35
  2018. +,xdiv%=xdiv%*xnum%:xmul%=xmul%*xdenom%*S%
  2019. ,,ydiv%=ydiv%*ynum%:ymul%=ymul%*ydenom%*S%
  2020.  r$="FN1500" r$="FN8"
  2021.  1600
  2022. #c%=12:camg=0:planar%=
  2023. 1*S$=
  2024. #c%:S%=
  2025.  "BMHD":sx%=
  2026. beHW:sy%=
  2027. beHW:S%=
  2028. W:planes%=
  2029. #c%:masking%=
  2030. #c%=1
  2031. 46compression=
  2032. #c%:S%=
  2033. HW:U%=
  2034. #c%:V%=
  2035. #c%:S%=
  2036.  scale% ymul%=ymul%*V%:ydiv%=ydiv%*U%
  2037.  I%=0
  2038. (1<<planes%)-1:r%(I%)=I%/((1<<planes%)-1)*F:
  2039. :g%()=r%():b%()=r%()
  2040.  "CMAP":S%=
  2041. #c%+S%:
  2042.  I%=0
  2043. (1<<planes%)-1:r%(I%)=(
  2044. #c%>>4)/15*F
  2045. 81g%(I%)=(
  2046. #c%>>4)/15*F:b%(I%)=(
  2047. #c%>>4)/15*F:
  2048. #c%=S%:
  2049.  info% 
  2050. "Warning: truncated IFF CMAP information to 4 bits"
  2051.  "CAMG":camg=
  2052.  info% 
  2053. "Amiga viewport mode ";~camg
  2054.  "BODY":st%=
  2055.  info% 
  2056. "Ignoring IFF property "S$" size ";S%
  2057. #c%+S%
  2058.  S$="BODY":
  2059.  compression info$="Compressed " 
  2060.  info$=""
  2061. @,ham=(camg 
  2062.  &800)<>0:
  2063.  ham info$+="HAM "
  2064. A5half=(camg 
  2065.  &80)<>0:
  2066.  half info$+="half-bright "
  2067.  half half%=1<<planes%-1:
  2068.  I%=0
  2069. half%-1:r%(I%+half%)=r%(I%)/2:g%(I%+half%)=g%(I%)/2:b%(I%+half%)=b%(I%)/2:
  2070. CEinfo$+="IFF file, "+
  2071.  sx%+" by "+
  2072.  sy%+" pixels, "+
  2073. bits(planes%)
  2074.  masking% info$+=" with mask (ignored)"
  2075. E7rowbytes%=(sx%+15>>4)<<1:plbytes%=rowbytes%*planes%
  2076. F9pbuff%=
  2077. dim(sx%):r$="FN"+
  2078. (1600+compression):cache%=
  2079.  compression 
  2080. H(cachebytes%=
  2081. :plbuff%=
  2082. dim(plbytes%)
  2083. JRrealrowbytes%=rowbytes%:rowbytes%=plbytes%:
  2084.  masking% rowbytes%+=realrowbytes%
  2085. #c%=st%
  2086.  1700
  2087. NBsx%=640:rowbytes%=80:sy%=350:planes%=4:plbytes%=4*80:planar%=
  2088. O3buff%=
  2089. dim(80*4):pbuff%=
  2090. dim(640):G=F/3:H=F*2/3
  2091. P(r%()=0,0,0,0,F,F,F,H,G,G,G,G,F,F,F,F
  2092. Q(g%()=0,0,F,F,0,0,F,H,G,G,F,F,G,G,F,F
  2093. R(b%()=0,F,0,F,0,F,0,H,G,F,G,F,G,F,G,F
  2094. SVmasking%=
  2095. :r$="FN1600":st%=16:
  2096. #c%=16:cache%=
  2097. :realrowbytes%=80:rowbytes%=plbytes%
  2098. TSinfo$="PC EGA '.dsp' file, 640 by 350 pixels, 4 bits per pixel (fixed palette)"
  2099.  1800
  2100. V?sx%=72*8:sy%=720:quant%=1:input=1:
  2101. #c%=st%:plbuff%=
  2102. dim(72)
  2103. cache%=
  2104. :cachebytes%=
  2105. XQr%(0)=F:g%(0)=F:b%(0)=F:bigendianbits=
  2106. :rowbytes%=72:r$="FN1501":rowstogo%=-1
  2107.  scale% xmul%=xmul%*90:xdiv%=xdiv%*72:ymul%=ymul%*90:ydiv%=ydiv%*72
  2108. Z>info$="MacPaint file, 576 by 720 bits, creator id "+
  2109. S$,4)
  2110.  1850
  2111. #c%=552
  2112. done%=
  2113. code%=
  2114. beHW:
  2115.  code% 
  2116.  &01:
  2117. cCrowbytes%=
  2118. beHW:
  2119. (rowbytes% 
  2120. &8000)=0 
  2121. 42,"PICT without Pixmap"
  2122. d3sy%=
  2123. beHW:sx%=
  2124. beHW:sy%=
  2125. beHW-sy%:sx%=
  2126. beHW-sx%
  2127. e<junk%=
  2128. HW:packtype%=
  2129. beHW:junk%=
  2130. W:resx%=
  2131. beW:resy%=
  2132. beHW<>0 
  2133. 42,"ChangeFSI expected Mac PICT2 pixeltype=Chunky"
  2134. g&bpp%=
  2135. beHW:junk%=
  2136. beHW:junk%=
  2137. h$junk%=
  2138. beW:junk%=
  2139. beW:junk%=
  2140. junk%=
  2141. beW:junk%=
  2142. j`C%=
  2143. beHW:
  2144.  I%=0
  2145. C%:J%=
  2146. beHW:r%(J%)=
  2147. beHW/65535*F:g%(J%)=
  2148. beHW/65535*F:b%(J%)=
  2149. beHW/65535*F:
  2150. done%=
  2151.  &9A:junk%=
  2152. W:rowbytes%=
  2153. beHW:
  2154. (rowbytes% 
  2155. &8000)=0 
  2156. 42,"PICT without Pixmap"
  2157. m3sy%=
  2158. beHW:sx%=
  2159. beHW:sy%=
  2160. beHW-sy%:sx%=
  2161. beHW-sx%
  2162. n<junk%=
  2163. HW:packtype%=
  2164. beHW:junk%=
  2165. W:resx%=
  2166. beW:resy%=
  2167. beHW<>16 
  2168. 42,"ChangeFSI expected Mac PICT2 pixeltype=RGBDirect"
  2169. p'bpp%=
  2170. beHW:comps%=
  2171. beHW:junk%=
  2172. junk%=
  2173. beW:junk%=
  2174. junk%=
  2175. beHW:junk%=
  2176.  bpp%>16 
  2177. nopal 
  2178.  J%=2^(bpp%
  2179.  I%=0
  2180. J%-1:r%(I%)=I%/(J%-1)*F:
  2181. :g%()=r%():b%()=r%()
  2182.  bpp%=32 
  2183.  comps%=3 bpp%=24:rowbytes%=3*sx%
  2184. done%=
  2185. 42,"ChangeFSI can't understand Mac PICT2 code "+
  2186. ~code%
  2187.  done%
  2188. y3junk%=
  2189. beHW:junk%=
  2190. beHW:junk%=
  2191. beHW:junk%=
  2192. z3junk%=
  2193. beHW:junk%=
  2194. beHW:junk%=
  2195. beHW:junk%=
  2196. junk%=
  2197. |Ncache%=
  2198. :cachebytes%=
  2199. :bigendianbits=
  2200. :st%=
  2201. #c%:rowbytes%=rowbytes%
  2202. &8000
  2203.  scale% xmul%=xmul%*90*65536:xdiv%=xdiv%*resx%:ymul%=ymul%*90*65536:ydiv%=ydiv%*resy%
  2204. ~Binfo$="Mac PICT2, "+
  2205.  sx%+" by "+
  2206.  sy%+" pixels, "+
  2207. bits(bpp%)
  2208. &plbuff%=
  2209. dim(rowbytes%):
  2210.  bpp%>8 
  2211. Trbo%=-1:rb%=plbuff%+sx%:gb%=plbuff%+sx%*2:bb%=plbuff%+sx%*3:r$="FN1851":input=24
  2212.  comps%=3 rb%=plbuff%:gb%=plbuff%+sx%:bb%=plbuff%+sx%*2
  2213.  1900
  2214. #c%=1:C%=
  2215.  E%<>1 
  2216.  42,"ZSoft .PCX file with unknown encoding"
  2217. #c%:sx%=
  2218. HW:sy%=
  2219. HW:sx%=
  2220. HW+1-sx%:sy%=
  2221. HW+1-sy%
  2222.  scale% xmul%=xmul%*90:xdiv%=xdiv%*
  2223. HW:ymul%=ymul%*90:ydiv%=ydiv%*
  2224. #c%=65:planes%=
  2225. #c%:planar%=planes%>1:rowbytes%=
  2226. HW:bpp%=E%*planes%
  2227. pcxpal=16:
  2228.  bpp%>4 
  2229.  C%=5 
  2230. #c%-769:
  2231. #c%=12 pcxpal=
  2232. #c%-768
  2233. #c%=pcxpal:E%=0:
  2234.  C%=0
  2235. (1<<bpp%)*3-1:E%=E%
  2236.  info% 
  2237. ".PCX palette mask established at ";~E%
  2238.  E%=0 
  2239.  C%=0
  2240. (1<<bpp%)-1:r%(C%)=C%/((1<<bpp%)-1)*F:
  2241. :g%()=r%():b%()=r%()
  2242. #c%=pcxpal:
  2243.  C%=0
  2244. (1<<bpp%)-1
  2245. Er%(C%)=(
  2246. E%)/E%*F:g%(C%)=(
  2247. E%)/E%*F:b%(C%)=(
  2248. E%)/E%*F
  2249. rewind
  2250. Lplbytes%=rowbytes%*planes%:plbuff%=
  2251. dim(plbytes%):cache%=
  2252. :cachebytes%=
  2253.  planar% pbuff%=
  2254. dim(sx%) 
  2255.  input=bpp%:bigendianbits=
  2256. :r$="FN1100"
  2257. Hinfo$="ZSoft .PCX file, "+
  2258.  sx%+" by "+
  2259.  sy%+" pixels, "+
  2260. bits(bpp%)
  2261.  2000
  2262. #c%=0:L%=
  2263. #c%:C%=
  2264. #c%:I%=
  2265. #c%:J%=
  2266. HW:K%=
  2267. HW:M%=
  2268. Dsx%=
  2269. W:sx%=
  2270. HW:sy%=
  2271. HW:B%=
  2272. #c%:ID%=
  2273. &10 hflip%=
  2274. hflip%
  2275. (ID% 
  2276. &20)=0 vflip%=
  2277. vflip%
  2278. #c%+L%:
  2279.  M%=&18 
  2280.  C%=J%
  2281. 9b%(C%)=
  2282. #c%/255*F:g%(C%)=
  2283. #c%/255*F:r%(C%)=
  2284. #c%/255*F
  2285. nopal
  2286.  1,2,3:cache%=
  2287.  B%>8 
  2288.  B%>16 
  2289. Linput=24:bbo%=0:gbo%=1:rbo%=2:step24=B%
  2290. 8:r$="FN24":rowbytes%=step24*sx%
  2291. rowbytes%=sx%*2
  2292.  rpal%(255),gpal%(255):input=16:step24=2:r$="FN16"
  2293.  C%=0
  2294. &gpal%(C%)=(C%>>5)<<8 
  2295. 31)<<16
  2296. %rpal%(C%)=(C%>>2)
  2297. 3)<<11
  2298.  C%=0
  2299. 31:r%(C%)=C%/31*F:
  2300. :g%()=r%():b%()=r%()
  2301. r$="FN8":rowbytes%=sx%
  2302. Kinfo$="Truevision TGA image, "+
  2303.  sx%+" by "+
  2304.  sy%+" pixels, "+
  2305. bits(B%)
  2306.  9,10,11:step24=B%
  2307. 8:rowbytes%=step24*sx%:buff%=
  2308. dim(rowbytes%)
  2309.  B%>8 
  2310.  B%>16 
  2311. :input=24:bb%=buff%:gb%=buff%+1:rb%=buff%+2:r$="FN2002"
  2312.  rpal%(255),gpal%(255):input=16:step24=2:r$="FN2001"
  2313.  C%=0
  2314. &gpal%(C%)=(C%>>5)<<8 
  2315. 31)<<16
  2316. %rpal%(C%)=(C%>>2)
  2317. 3)<<11
  2318.  C%=0
  2319. 31:r%(C%)=C%/31*F:
  2320. :g%()=r%():b%()=r%()
  2321. Oinfo$="Truevision TGA RLE image, "+
  2322.  sx%+" by "+
  2323.  sy%+" pixels, "+
  2324. bits(B%)
  2325.  2100
  2326. ?quant%=6:sx%=512:rowbytes%=2*sx%:sy%=256:cache%=
  2327. :r$="FN16"
  2328.  rpal%(255),gpal%(255):input=16:step24=2
  2329.  C%=0
  2330.  gpal%(C%)=C%>>3 
  2331. 7)<<11
  2332. %rpal%(C%)=(C%
  2333. 7)<<8 
  2334.  (C%>>3)<<16
  2335.  C%=0
  2336. 31:r%(C%)=C%/31*F:
  2337. :b%()=r%()
  2338.  C%=0
  2339. 63:g%(C%)=C%/63*F:
  2340.  scale% ymul%=ymul%*2
  2341. Hinfo$="Pineapple image, 512 by 256 pixels, 16 bits per pixel":
  2342. #c%=7
  2343.  2200
  2344. 9quant%=8:step24=1:
  2345. #c%=0:s$=
  2346. #c%:E%=
  2347. s$,":"):st%=
  2348. ;sx%=
  2349. s$,E%+1):sy%=
  2350. s$,E%+2+
  2351.  sx%):
  2352. nopal:input=24
  2353. Arowbytes%=sx%*3:rbo%=0:gbo%=sx%:bbo%=2*sx%:cache%=
  2354. :r$="FN24"
  2355. Iinfo$="Irlam image, "+
  2356.  sx%+" by "+
  2357.  sy%+" pixels, 24 bits per pixel"
  2358.  2250
  2359. #c%=16:sx%=
  2360. W:sy%=
  2361.  rpal%(255),gpal%(255),bpal%(255),table%(255)
  2362.  C%=0
  2363. 255:D%=C%
  2364. table%(C%)=(D%-16)/219*F
  2365. 128 D%-=256
  2366. )r%(C%)=
  2367. (D%/160*F):b%(C%)=
  2368. (D%/126*F)
  2369. >g%(C%)=
  2370. (-D%/160*rwt/gwt*F):gpal%(C%)=
  2371. (-D%/126*bwt/gwt*F)
  2372. ,table%()=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  2373. 5st%=32:
  2374. #c%=32:cache%=
  2375. :rowbytes%=2*sx%:input=411
  2376. >info$="Irlam YUV 4:1:1 file "+
  2377.  sx%+" by "+
  2378.  sy%+" pixels"
  2379.  2300
  2380. #c%=6:sx%=
  2381. HW:sy%=
  2382. HW:D%=
  2383. #c%:ncolors%=
  2384. #c%:input=24
  2385. ;vflip%=
  2386. vflip%:quant%=
  2387. #c%:ncmap%=
  2388. #c%:cmaplen%=1<<
  2389. nopal:back%=
  2390. dim(4):!back%=0
  2391. clrfirst%=D%
  2392. 2)=0 
  2393.  I%=0
  2394. ncolors%-1:back%?I%=
  2395. (ncolors%
  2396. 1)=0 
  2397. 4 alpha%=
  2398. dim(sx%)
  2399.  ncmap%>0 
  2400.  I%=0
  2401. cmaplen%-1:r%(I%)=
  2402. HW/&FF00*F:
  2403.  I%=0
  2404. cmaplen%-1:g%(I%)=
  2405. HW/&FF00*F:
  2406.  I%=0
  2407. cmaplen%-1:b%(I%)=
  2408. HW/&FF00*F:
  2409. #c%+1
  2410. Hst%=
  2411. #c%:buff%=
  2412. dim(sx%*3):rb%=buff%:gb%=buff%+1*sx%:bb%=buff%+2*sx%
  2413. rewind
  2414. Rinfo$="Utah rle image, "+
  2415.  sx%+" by "+
  2416.  sy%+" pixels, "+
  2417. bits(ncolors%*quant%)
  2418.  2400
  2419. #c%=riffoff%+&0a:st%=
  2420. W:pal%=
  2421. W:sx%=
  2422. W:sy%=
  2423.  pal% 
  2424. #c%=riffoff%+&18:input=
  2425. HW:compression=0
  2426. #c%=riffoff%+&1c:input=
  2427. HW:compression=
  2428. #c%=riffoff%+&26:xppm=
  2429. W:yppm=
  2430.  xppm<>0 
  2431.  yppm<>0 
  2432.  scale%<>0 
  2433. %xdiv%=xdiv%*xppm:xmul%=xmul%*3543
  2434. %ydiv%=ydiv%*yppm:ymul%=ymul%*3543
  2435.  42,"Unknown .BMP variant ("+
  2436.  pal%+")"
  2437. "bigendianbits=
  2438. :vflip%=
  2439. vflip%
  2440.  input 
  2441.  1:rowbytes%=sx%+7>>3
  2442.  4:rowbytes%=sx%+1>>1
  2443.  8:rowbytes%=sx%
  2444.  16:rowbytes%=sx%*2:r$="FN16":step24=2
  2445.  rpal%(255),gpal%(255)
  2446. %rmask%=&7c00:gmask%=42:bmask%=-42
  2447.  compression=3 
  2448. #c%=riffoff%+14+pal%:rmask%=
  2449. W:gmask%=
  2450. W:bmask%=
  2451. W:compression=0
  2452.  rmask%=&7c00 
  2453.  C%=0
  2454. &gpal%(C%)=(C%>>5)<<8 
  2455. 31)<<16
  2456. %rpal%(C%)=(C%>>2)
  2457. 3)<<11
  2458.  C%=0
  2459. 31:r%(C%)=C%/31*F:
  2460. :g%()=r%():b%()=r%()
  2461.  rmask%=&f800 
  2462.  C%=0
  2463. &gpal%(C%)=(C%>>5)<<8 
  2464. 31)<<16
  2465. %rpal%(C%)=(C%>>3)
  2466. 7)<<11
  2467.  C%=0
  2468. 31:r%(C%)=C%/31*F:
  2469. :b%()=r%()
  2470.  C%=0
  2471. 63:g%(C%)=C%/63*F:
  2472.  24,32
  2473. "rbo%=2:gbo%=1:bbo%=0:r$="FN24"
  2474.  C%=0
  2475. 255:r%(C%)=C%/255*F:
  2476. :g%()=r%():b%()=r%()
  2477. !1r$="FN24":step24=input/8:rowbytes%=sx%*step24
  2478. ""rmask%=-1:gmask%=42:bmask%=-42
  2479.  compression=3 
  2480. #c%=riffoff%+14+pal%:rmask%=
  2481. W:gmask%=
  2482. W:bmask%=
  2483. W:compression=0
  2484.  rmask%=&FF 
  2485.  rbo%=0:gbo%=1:bbo%=2
  2486.  gmask%=&FF 
  2487.  gbo%=0:bbo%=1:rbo%=2
  2488.  bmask%=&FF 
  2489.  bbo%=0:gbo%=1:rbo%=2
  2490. input=24
  2491.  42,".BMP file of unusual depth ("+
  2492.  input+")"
  2493.  input<=8 
  2494. #c%=riffoff%+14+pal%:r$="FN8"
  2495.  C%=0
  2496. 2^input-1
  2497. -@b%(C%)=
  2498. #c%/255*F:g%(C%)=
  2499. #c%/255*F:r%(C%)=
  2500. #c%/255*F:
  2501.  compression 
  2502.  0:info$="Uncompressed "
  2503.  1:info$="RLE8 compressed ":r$="FN2401"
  2504.  2:info$="RLE4 compressed ":r$="FN2402"
  2505.  42,".BMP compression type not supported ("+
  2506.  compression+")"
  2507. rowbytes%=rowbytes%+3
  2508.  compression<>0 cachebytes%=
  2509. :plbuff%=
  2510. dim(rowbytes%)
  2511. cache%=
  2512. #c%=riffoff%+st%
  2513. 9Qinfo$+="Windows 3.0 .BMP image, "+
  2514.  sx%+" by "+
  2515.  sy%+" pixels, "+
  2516. bits(input)
  2517.  2500
  2518. #c%=0:s$="":C%=
  2519.  C%<>0 s$+=
  2520.  C%:C%=
  2521. <8s$+=" version "+
  2522. W:sx%=
  2523. W:sy%=
  2524. W:input=
  2525. W:cache%=
  2526. =ainfo$="!Translator Clear format made by "+s$+", "+
  2527.  sx%+" by "+
  2528.  sy%+" pixels, "+
  2529. bits(input)
  2530.  input>8 
  2531. nopal:input=24:step24=3:rowbytes%=3*sx%:rbo%=0:gbo%=1:bbo%=2:r$="FN24"
  2532.  C%=0
  2533. 2^input-1
  2534. B9r%(C%)=
  2535. #c%/255*F:g%(C%)=
  2536. #c%/255*F:b%(C%)=
  2537. #c%/255*F
  2538. D"input=8:r$="FN8":rowbytes%=sx%
  2539.  2600
  2540. #c%=0:C%=
  2541.  0:sx%=320:sy%=200:planes%=4
  2542.  1:sx%=640:sy%=200:planes%=2
  2543.  2:sx%=640:sy%=400:planes%=1
  2544. 42,"ChangeFSI knows nothing of "+
  2545.  C%+" type Degas files"
  2546.  I%=0
  2547. (1<<input)-1:D%=
  2548. beHW:r%(I%)=(D%>>8
  2549. 7)/7*F:g%(I%)=(D%>>4
  2550. 7)/7*F:b%(I%)=(D%
  2551. 7)/7*F:
  2552. P<cache%=
  2553. :planar%=
  2554. :masking%=
  2555. :st%=34:
  2556. #c%=34:r$="FN1600"
  2557. QHrowbytes%=(sx%+15>>4)<<1:plbytes%=rowbytes%*planes%:pbuff%=
  2558. dim(sx%)
  2559. 128 r$="FN1601":flag=1600:cachebytes%=
  2560. :plbuff%=
  2561. dim(plbytes%) 
  2562.  realrowbytes%=2:rowbytes%=plbytes%
  2563. SEinfo$="Degas file "+
  2564.  sx%+" by "+
  2565.  sy%+" pixels, "+
  2566. bits(planes%)
  2567.  2700
  2568. #c%=4:sx%=
  2569. HW:sy%=
  2570.  &AF:rowbytes%=sx%:cache%=
  2571. :r$="FN8":st%=&30A
  2572.  42,"Panic in ColoRIX reading - ChangeFSI largely ignorant of format!"
  2573.  C%=0
  2574. 2^input-1
  2575. [6r%(C%)=
  2576. #c%/63*F:g%(C%)=
  2577. #c%/63*F:b%(C%)=
  2578. #c%/63*F
  2579. #c%=st%
  2580. ^Einfo$="ColoRIX file "+
  2581.  sx%+" by "+
  2582.  sy%+" pixels, "+
  2583. bits(input)
  2584.  2800
  2585. #c%=0:
  2586. fits:
  2587. s$,8) 
  2588.  "SIMPLE  ":
  2589. s$,30,1)<>"T" 
  2590. 42,"ChangeFSI can only read Simple FITS format"
  2591.  "BITPIX  ":input=
  2592. s$,10)
  2593.  "NAXIS   ":
  2594. s$,10)<>2 
  2595. 42,"ChangeFSI can only read 2d FITS images"
  2596.  "NAXIS1  ":sx%=
  2597. s$,10)
  2598.  "NAXIS2  ":sy%=
  2599. s$,10)
  2600.  "END     "
  2601.  info% 
  2602. "Ignoring FITS record "s$
  2603. s$,8)="END     "
  2604. j.st%=(
  2605. 2880 + 1)*2880:cache%=
  2606. #c%=st%
  2607.  input 
  2608.  8:r$="FN8":rowbytes%=sx%:
  2609. nopal
  2610.  16:rowbytes%=2*sx%:
  2611.  rpal%(255),gpal%(255):step24=2:r$="FN16"
  2612.  C%=0
  2613. gpal%(C%)=C%<<8
  2614. rpal%(C%)=C%
  2615. :cheat%=0:
  2616.  invert% cheat%=F
  2617.  C%=0
  2618. 255:r%(C%)=cheat%+C%/65535*F:g%(C%)=((C%
  2619. &80)<<8)/65535*F:b%(C%)=cheat%:
  2620. :rwt=1:gwt=1:bwt=1
  2621.  42,"ChangeFSI can't read a FITS image with this number of bits per pixel"
  2622. uBinfo$="FITS file "+
  2623.  sx%+" by "+
  2624.  sy%+" pixels, "+
  2625. bits(input)
  2626.  2900
  2627. #c%=4:sx%=
  2628. beHW:sy%=
  2629. beHW:
  2630. #c%=&42:input=
  2631. beHW:C%=
  2632. x=rowbytes%=
  2633. beHW:C%=
  2634. beW:st%=
  2635. #c%=st%:r$="FN8":
  2636. nopal
  2637.  rpal%(15),gpal%(15),bpal%(15)
  2638. zIrpal%()=&e6,&23,&e6,&7f,&17,&00,&a1,&45,&e6,&4a,&e6,&73,&6e,&47,&8a,0
  2639. {Igpal%()=&e6,&78,&00,&23,&a1,&73,&2e,&2e,&c8,&a6,&75,&40,&b8,&78,&55,0
  2640. |Ibpal%()=&b8,&e6,&00,&a1,&17,&2e,&0c,&2e,&00,&c6,&00,&e6,&00,&00,&00,0
  2641.  C%=&80
  2642. &8F:r%(C%)=rpal%(C%-&80)/255*F:g%(C%)=gpal%(C%-&80)/255*F:b%(C%)=bpal%(C%-&80)/255*F:
  2643. :cache%=
  2644. ~Hinfo$="Apollo GPR file "+
  2645.  sx%+" by "+
  2646.  sy%+" pixels, "+
  2647. bits(input)
  2648.  3000
  2649. Hsx%=720:sy%=
  2650. #c%/1440:
  2651.  rpal%(255),gpal%(255),bpal%(255),table%(255)
  2652.  C%=0
  2653. table%(C%)=(C%-16)/219*F
  2654. >r%(C%)=(C%-128)/186*0.624*F:rpal%(C%)=(C%-128)/160*0.952*F
  2655. ?g%(C%)=-(C%-128)/186*0.64*F:gpal%(C%)=-(C%-128)/160*0.277*F
  2656. =b%(C%)=(C%-128)/186*1.73*F:bpal%(C%)=-(C%-128)/160*1.11*F
  2657.  C%=0
  2658. table%(C%)=(C%-16)/219*F
  2659. 5r%(C%)=
  2660. ((C%-128)/160*F):b%(C%)=
  2661. ((C%-128)/126*F)
  2662. Jg%(C%)=
  2663. (-(C%-128)/160*rwt/gwt*F):gpal%(C%)=
  2664. (-(C%-128)/126*bwt/gwt*F)
  2665. <table%()=-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
  2666. :st%=0:
  2667. #c%=0:cache%=
  2668. :rowbytes%=1440:input=422:gamma=1
  2669.  scale% ymul%=ymul%*2
  2670. <info$="CCIR601 4:2:2 file "+
  2671.  sx%+" by "+
  2672.  sy%+" pixels"
  2673.  3100
  2674. $quant%=8:
  2675. #c%=0:a$=
  2676. #c%:st%=
  2677. !sx%=
  2678.  a$:sy%=
  2679. a$," ")))
  2680. nopal:input=24:step24=3:rowbytes%=sx%*3
  2681. 4rbo%=0:gbo%=1:bbo%=2:cache%=
  2682. :flag=700:r$="FN24"
  2683. Sinfo$="!RayShade 'RGB' image, "+
  2684.  sx%+" by "+
  2685.  sy%+" pixels, 24 bits per pixel"
  2686.  3200
  2687. quant%=8:
  2688. #c%=0:st%=0
  2689. s$,"_")+1,1)
  2690.  sx% 
  2691.  5:sx%=768:sy%=512
  2692.  2:sx%=3072:sy%=2048
  2693.  1:sx%=1536:sy%=1024
  2694. nopal:input=24:step24=3:rowbytes%=sx%*3
  2695. 4rbo%=0:gbo%=1:bbo%=2:cache%=
  2696. :flag=700:r$="FN24"
  2697. Ninfo$="Kodak /RGB image, "+
  2698.  sx%+" by "+
  2699.  sy%+" pixels, 24 bits per pixel"
  2700.  3300
  2701. #c%=0:input=
  2702. GET,2)
  2703. GET:sx%=
  2704.  s$:sy%=
  2705. s$," ")):
  2706.  sy%=0 sy%=
  2707. cache%=
  2708.  input 
  2709.  4:input=1:r$="FN8":r%(0)=F:g%()=r%():b%()=r%():bigendianbits=
  2710. rowbytes%=(sx%+7)
  2711.  5:input=8:r$="FN8":E%=
  2712.  C%=0
  2713. E%:r%(C%)=C%/E%*F:
  2714. :g%()=r%():b%()=r%()
  2715. rowbytes%=sx%
  2716.  6:input=24:r$="FN24":E%=
  2717. GET:step24=3:rbo%=0:gbo%=1:bbo%=2
  2718.  C%=0
  2719. E%:r%(C%)=C%/E%*F:
  2720. :g%()=r%():b%()=r%()
  2721. rowbytes%=sx%*3
  2722. #c%:flag=700
  2723. Dinfo$+="pbm image, "+
  2724.  sx%+" by "+
  2725.  sy%+" pixels, "+
  2726. bits(input)
  2727. s$,1)<>"#":=s$
  2728.  3400
  2729. #c%=0:s$=
  2730. GET:input=16:quant%=5
  2731. GET:sx%=
  2732.  s$:sy%=
  2733. s$," ")):s$=
  2734.  rpal%(255),gpal%(255):input=16:step24=2
  2735.  C%=0
  2736. "gpal%(C%)=(C%>>5)<<8 
  2737. +rpal%(C%)=((C%>>2)
  2738. 31)<<16 
  2739. 3)<<11
  2740. cache%=
  2741. :r$="FN16"
  2742.  C%=0
  2743. 31:r%(C%)=C%/31*F:
  2744. :g%()=r%():b%()=r%()
  2745. %rowbytes%=sx%*2:st%=
  2746. #c%:flag=700
  2747. Cinfo$="p15 image, "+
  2748.  sx%+" by "+
  2749.  sy%+" pixels, "+
  2750. bits(input)
  2751.  3450
  2752. #c%=0:info$=
  2753. 4ybits%=
  2754. info$,
  2755. info$," ")):ymax%=(1<<ybits%)-1
  2756. ;ubits%=
  2757. info$,
  2758. info$,"Y ")+1):umax%=(1<<(ubits%-1))-1
  2759. ;vbits%=
  2760. info$,
  2761. info$,"U ")+1):vmax%=(1<<(vbits%-1))-1
  2762. GET:sx%=
  2763.  s$:sy%=
  2764. s$," "))
  2765.  rpal%(255),gpal%(255),bpal%(255),table%(255)
  2766.  C%=0
  2767. ymax%:table%(C%)=C%/ymax%*F:
  2768. D%=(1<<ubits%)-1
  2769.  C%=0
  2770. D%:d=C%/umax%:
  2771.  d>1 d=-(D%-C%)/umax%
  2772. ;b%(C%)=
  2773. (d*(1-bwt)*F):gpal%(C%)=
  2774. (-d*(1-bwt)*bwt/gwt*F)
  2775. D%=(1<<vbits%)-1
  2776.  C%=0
  2777. D%:d=C%/vmax%:
  2778.  d>1 d=-(D%-C%)/vmax%
  2779. 8r%(C%)=
  2780. (d*(1-rwt)*F):g%(C%)=
  2781. (-d*(1-rwt)*rwt/gwt*F)
  2782. ;rowbytes%=sx%*2:st%=
  2783. #c%:cache%=
  2784. :r$="FN2250":input=555
  2785. ,info$+=", "+
  2786.  sx%+" by "+
  2787.  sy%+" pixels"
  2788.  3500
  2789. Aquant%=1:
  2790. #c%=6:E%=
  2791. HW:sx%=
  2792. HW:sx%=
  2793. HW:sy%=
  2794. HW:st%=
  2795. HW:st%=
  2796. 4rowbytes%=sx%/8+1
  2797. 1:cache%=
  2798. :st%+=
  2799. #c%=st%
  2800. ,r$="FN8":input=1:r%(0)=F:g%(0)=F:b%(0)=F
  2801. Minfo$="Pocketbook bitmap, "+
  2802.  sx%+" by "+
  2803.  sy%+" pixels, 1 bit per pixel"
  2804. 9planar%=
  2805. :planes%=2:r$="FN1600":input=8:cachebytes%=
  2806. ?r%(0)=F:r%(1)=(F/3)*2:r%(2)=F/3:r%(3)=0:g%()=r%():b%()=r%()
  2807. Hplbytes%=rowbytes%*planes%:buff%=
  2808. dim(plbytes%*sy%):pbuff%=
  2809. dim(sx%)
  2810. realrowbytes%=rowbytes%*sy%
  2811. Pinfo$="PocketbookII bitmap, "+
  2812.  sx%+" by "+
  2813.  sy%+" pixels, 2 bits per pixel"
  2814.  42,"Unknown Pocketbook PIC format"
  2815.  3600
  2816. Bpcdblk%=
  2817. dim(40):
  2818. &20023,"ChangeFSI$PCDindex",pcdblk%,20 
  2819.  pcdblk%?Z=13:pcdindex%=
  2820. $pcdblk% 
  2821.  pcdindex%=3
  2822. "PhotoCD_Open",1,c%,1 
  2823.  pcdh%:
  2824. "PhotoCD_GetCount",pcdh% 
  2825. (Z>>pcdindex%)=0 
  2826. 42,"Desired resolution unavailable"
  2827. "PhotoCD_GetRotation",pcdh% 
  2828. ,,pcdtr%
  2829. "PhotoCD_GetSize",pcdh%,,pcdindex% 
  2830. ,,,,sx%,sy%
  2831. )pcdblk%!0=0:pcdblk%!8=sx%:pcdblk%!4=0
  2832. 7pcdblk%!16=0:pcdblk%!20=2:pcdblk%!24=1:pcdblk%!28=3
  2833.  pcdtr% 
  2834.  &80000000:hflip%=
  2835. hflip%
  2836.  rotate% 
  2837.  0:rotate%=1
  2838.  -1:rotate%=0
  2839.  1:rotate%=0:vflip%=
  2840. vflip%:hflip%=
  2841. hflip%
  2842.  &8000005A
  2843.  rotate% 
  2844.  0:rotate%=1:vflip%=
  2845. vflip%
  2846.  -1:rotate%=0:vflip%=
  2847. vflip%
  2848.  1:rotate%=0:hflip%=
  2849. hflip%
  2850.  180:hflip%=
  2851. hflip%:vflip%=
  2852. vflip%
  2853.  &800000B4:vflip%=
  2854. vflip%
  2855.  rotate% 
  2856.  0:rotate%=-1
  2857.  1:rotate%=0
  2858.  -1:rotate%=0:vflip%=
  2859. vflip%:hflip%=
  2860. hflip%
  2861.  &8000010E
  2862.  rotate% 
  2863.  0:rotate%=-1:vflip%=
  2864. vflip%
  2865.  1:rotate%=0:vflip%=
  2866. vflip%
  2867.  -1:rotate%=0:hflip%=
  2868. hflip%
  2869.  PANIC
  2870. @input=24:step24=3:rbo%=0:gbo%=1:bbo%=2:pcdcachesize%=32*1024
  2871. Arowbytes%=sx%*3:
  2872. nopal:cache%=
  2873. :pcdcache%=
  2874. dim(pcdcachesize%)
  2875. Kinfo$="PhotoCD image, "+
  2876.  sx%+" by "+
  2877.  sy%+" pixels, 24 bits per pixel"
  2878.  3700
  2879. "<ChangeFSI$Dir>.CFSIjpeg":jpeg%=
  2880. 12,4,A%,jpeg%,
  2881. Ddatacache%=
  2882. cachedim(
  2883. #c%):
  2884.  datacache%=-1 datacache%=
  2885. #c%=0:
  2886. 12,4,c%,datacache%,
  2887. RA%=datacache%:B%=jpegblk%:C%=jpegblk%+4:D%=jpegblk%+8:E%=jpegblk%+12:
  2888.  jpeg%+8
  2889. &B%=jpegblk%!12:jpegspace%=
  2890. dim(B%)
  2891. 'C%=datacache%:A%=jpegspace%:D%=
  2892.  jpeg%:cache%=
  2893. 42,"JPEG code error: "+
  2894. 5sx%=A%!20:sy%=A%!24:input=8*A%?28:
  2895. nopal:step24=4
  2896. Dinfo$="JFIF image, "+
  2897.  sx%+" by "+
  2898.  sy%+" pixels, "+
  2899. bits(input)
  2900. &jpegy%=sy%:r$="FN"+
  2901. (3700+input)
  2902.  3800
  2903. #c%=24:sx%=
  2904. W:sy%=
  2905.  scale% ymul%=ymul%*2
  2906.  rpal%(255),gpal%(255),bpal%(255),table%(255)
  2907.  C%=0
  2908.  C%<128 table%(C%)=C%/127*F
  2909. D%=C%:
  2910. 128 D%-=256
  2911.  )r%(C%)=
  2912. (D%/160*F):b%(C%)=
  2913. (D%/126*F)
  2914. !>g%(C%)=
  2915. (-D%/160*rwt/gwt*F):gpal%(C%)=
  2916. (-D%/126*bwt/gwt*F)
  2917. #c%=52:st%=
  2918. #c%=64:cache%=
  2919. :rowbytes%=2*sx%:input=411
  2920. $Hinfo$="Uncompressed Techno-I YUV file "+
  2921.  sx%+" by "+
  2922.  sy%+" pixels"
  2923.  3900
  2924. #c%=8:sx%=
  2925. W:sy%=
  2926. W:st%=16:quant%=12:step24=6
  2927.  C%=0
  2928. 4095:r%(C%)=C%/4095*F:
  2929. :g%()=r%():b%()=r%()
  2930. (Dinput=48:rowbytes%=sx%*6:cache%=
  2931. :r$="FN24":rbo%=0:gbo%=2:bbo%=4
  2932. )Rinfo$="Ronald Alpiar format, "+
  2933.  sx%+" by "+
  2934.  sy%+" pixels, 36 bits per pixel"
  2935.  3905
  2936. #c%=8:sx%=
  2937. W:sy%=
  2938. W:st%=16:quant%=16:step24=6
  2939.  C%=0
  2940. 65535:r%(C%)=C%/65535*F:
  2941. :g%()=r%():b%()=r%()
  2942. -Dinput=48:rowbytes%=sx%*6:cache%=
  2943. :r$="FN24":rbo%=0:gbo%=2:bbo%=4
  2944. .Rinfo$="Ronald Alpiar format, "+
  2945.  sx%+" by "+
  2946.  sy%+" pixels, 48 bits per pixel"
  2947. 0?st%=0:
  2948. #c%=0:sx%=160:sy%=128:input=8:cache%=
  2949. :rowbytes%=sx%
  2950.  C%=0
  2951. 255:r%(C%)=C%/255*F:
  2952. :g%()=r%():b%()=r%():r$="FN8"
  2953. 2Ninfo$="The number of the beast, 160 by "+
  2954.  sy%+" pixels, 8 bits per pixel"
  2955.  info% 
  2956.  info$
  2957.  hourg%=
  2958. "Hourglass_On" 
  2959. "Hourglass_Off"
  2960. hour%=&406c4
  2961.  m=-9 
  2962.  m=-10 
  2963. "XOS_CLI","rmensure CompressJPEG 0 rmload System:Modules.jcompmod"
  2964. "XOS_CLI","rmensure CompressJPEG 0 IF ""<ChangeFSI$Dir>"" <> """" THEN rmload <ChangeFSI$Dir>.jcompmod"
  2965. :B*rmensure CompressJPEG 0 ERROR Can't find CompressJPEG module.
  2966.  invert% r%()=F-r%():g%()=F-g%():b%()=F-b%()
  2967.  xdiv% 
  2968. reduce(xmul%,xdiv%)
  2969.  ydiv% 
  2970. reduce(ymul%,ydiv%)
  2971.  -1:x%=256:y%=256:ncol=256:
  2972.  scaleo% xdiv%=xdiv%*2:ydiv%=ydiv%*2
  2973.  -2:x%=sx%:y%=sy%:
  2974.  spm=18 ncol=1 
  2975.  ncol=15
  2976.  -3,-5,-6:x%=sx%:y%=sy%:ncol=2^15-1
  2977.  -4,-7,-8:x%=sx%:y%=sy%:ncol=2^24-1
  2978.  -9,-10:x%=sx%:y%=sy%:ncol=2^24-1:
  2979.  m=-9 ncol=256
  2980. 53,m,4 
  2981.  ,,nx:
  2982. 53,m,5 
  2983.  ,,ny:nx=1<<nx:ny=1<<ny
  2984. 53,m,11 
  2985.  ,,x%:
  2986. 53,m,12 
  2987.  ,,y%:x%+=1:y%+=1
  2988. 53,m,3 
  2989.  ,,ncol:
  2990.  scaleo% 
  2991.  rotate% 
  2992. J!xdiv%=xdiv%*ny:ydiv%=ydiv%*nx
  2993.  xdiv% ymul%=ymul%*2
  2994.  ydiv% xmul%=xmul%*2
  2995. N!xdiv%=xdiv%*nx:ydiv%=ydiv%*ny
  2996.  xdiv% xmul%=xmul%*2
  2997.  ydiv% ymul%=ymul%*2
  2998. &62A51,m 
  2999.  r0;V:
  3000. 1)=0 
  3001.  r0=1 
  3002. ncol=255:
  3003.  m$<>"D" m$="R"
  3004.  m=-6 
  3005.  m=-7 
  3006.  m=-8 
  3007. Z,nx=
  3008. pnm$,5):ny=
  3009. pnm$,
  3010. pnm$,",",5)+1)
  3011.  scaleo% 
  3012.  rotate% 
  3013.  xdiv% ymul%=ymul%*nx
  3014.  ydiv% xmul%=xmul%*ny
  3015.  xdiv% xmul%=xmul%*nx
  3016.  ydiv% ymul%=ymul%*ny
  3017. c!xdiv%=xdiv%*90:ydiv%=ydiv%*90
  3018.  rotate% 
  3019.  x%,y%
  3020.  xdiv%=0 xdiv%=sx%
  3021.  ydiv%=0 ydiv%=sy%
  3022.  xs$="=" xmul%=x%:xdiv%=sx%
  3023.  ys$="=" ymul%=y%:ydiv%=sy%
  3024.  lock% 
  3025.  xmul%/xdiv%>ymul%/ydiv% xmul%=ymul%:xdiv%=ydiv% 
  3026.  ymul%=xmul%:ydiv%=xdiv%
  3027.  ncol=1 
  3028. "C":xdiv%=xdiv%*4:ydiv%=ydiv%*4
  3029.  A%(16),B%(16)
  3030. A%()=0,&00000001,&08000001,&08000101,&08080101,&08080103,&0C080103,&0C080303,&0C0C0303,&0C0E0303,&0C0E0703,&0E0E0703,&0E0E0707,&0E0F0707,&0E0F0F07,&0F0F0F07,&0F0F0F0F
  3031. B%()=0,&00000008,&01000008,&01000808,&01010808,&0101080C,&0301080C,&03010C0C,&03030C0C,&03070C0C,&03070E0C,&07070E0C,&07070E0E,&070F0E0E,&070F0F0E,&0F0F0F0E,&0F0F0F0F
  3032. t2even_gard=
  3033. dim(17*32*4):odd_gard=
  3034. dim(17*32*4)
  3035.  I%=0
  3036.  J%=0
  3037. 16:even_gard!(J%*32*4+I%*4)=A%(I%)
  3038. B%(J%)<<4:
  3039.  I%=0
  3040.  J%=0
  3041. 16:odd_gard!(I%*32*4+J%*4)=B%(I%)
  3042. A%(J%)<<4:
  3043. "T":xdiv%=xdiv%*3:ydiv%=ydiv%*3
  3044.  A%(9),B%(9)
  3045. y@A%()=0,&0001,&4001,&4041,&4043,&40C3,&60C3,&61C3,&71C3,&71C7
  3046. z@B%()=0,&0004,&1004,&1104,&1106,&1186,&3186,&31C6,&71C6,&71C7
  3047. {2even_gard=
  3048. dim(10*16*4):odd_gard=
  3049. dim(10*16*4)
  3050.  I%=0
  3051.  J%=0
  3052. 9:even_gard!(J%*16*4+I%*4)=A%(I%)
  3053. B%(J%)<<3:
  3054.  I%=0
  3055.  J%=0
  3056. 9:odd_gard!(I%*16*4+J%*4)=B%(I%)
  3057. A%(J%)<<3:
  3058. "D":xdiv%=xdiv%*2:ydiv%=ydiv%*2
  3059.  A%(4),B%(4)
  3060. A%()=0,&1,&21,&31,&33
  3061. B%()=0,&2,&12,&32,&33
  3062. *even_gard=
  3063. dim(5*8):odd_gard=
  3064. dim(5*8)
  3065.  I%=0
  3066.  J%=0
  3067. 4:even_gard?(J%*8+I%)=A%(I%)
  3068. B%(J%)<<2:
  3069.  I%=0
  3070.  J%=0
  3071. 4:odd_gard?(I%*8+J%)=B%(I%)
  3072. A%(J%)<<2:
  3073. reduce(xmul%,xdiv%):
  3074. reduce(ymul%,ydiv%)
  3075.  xdiv%*ydiv%*255>2^32 xdiv%=xdiv%
  3076. 1:ydiv%=ydiv%
  3077. 1:xmul%=xmul%
  3078. 1:ymul%=ymul%
  3079.  xdiv%*ydiv%*255<2^32
  3080.  info% 
  3081. "Size ratios are x ";xmul%":"xdiv%" y "ymul%":"ydiv%
  3082. 9x%=sx%*xmul%/xdiv%+.1:y%=sy%*ymul%/ydiv%+.1:rows%=sy%
  3083. order%=x%*y%>sx%*sy%
  3084. code%=
  3085. dim(8192):SP=13
  3086.  cache% 
  3087. cachesize(code%)
  3088.  cachebytes% 
  3089. ;filesize%=
  3090.  cache%>filesize% cache%=filesize%
  3091.  cachebytes%>0 
  3092.  cache%>cachebytes% cache%=cachebytes%
  3093. cacherows%=cache%
  3094. ?filesize%=sy%*rowbytes%:
  3095.  cache%<rowbytes% cache%=rowbytes%
  3096.  cache%>filesize% cache%=filesize%
  3097. Ecacherows%=striprows%:
  3098.  cacherows%<1 cacherows%=cache%
  3099.  rowbytes%
  3100. cache%=cacherows%*rowbytes%
  3101. Hdatacache%=
  3102. cachedim(cache%):
  3103.  datacache%=-1 datacache%=
  3104. dim(cache%)
  3105.  ncol=255 
  3106.  m$<>"D" m$="R"
  3107.  m$="R" 
  3108. (ncol=63 
  3109. m$="") 
  3110. 53,-1,3 
  3111. ,,J%:
  3112.  ncol=255 
  3113. =m J%=ncol
  3114.  ncol=63 
  3115. (m$=""
  3116. m$="R") J%=ncol
  3117.  J%<>ncol 
  3118. close:
  3119. 42,"You must be in a "+
  3120. (ncol+1)+" colour mode to do this"
  3121. J%=ncol:
  3122.  J%=63 J%=255
  3123. palette%=
  3124. dim((J%+1)*4)
  3125.  ncol=255 
  3126. "ColourTrans_ReadPalette",-1,-1,palette%,256*4
  3127.  I%=0
  3128. 255:palette%!(I%<<2)=palette%!(I%<<2)>>>8:
  3129.  ncol=63 
  3130.  I%=0
  3131. +palette%!(I%<<2)=(I%
  3132. 16)>>1)*17
  3133. /palette%?(I%<<2 
  3134. 1)=(I%
  3135. &60)>>3)*17
  3136. ;palette%?(I%<<2 
  3137. 2)=(I%
  3138. 8)>>1 
  3139. 128)>>4)*17
  3140.  I%=0
  3141. ncol:
  3142. "OS_ReadPalette",I%,16 
  3143.  ,,i%:palette%!(I%<<2)=i%>>>8:
  3144. :k%=palette%+1:nk%=palette%+2
  3145.  I%=0
  3146. ncol*4
  3147.  palette%?I%<>k%?I% 
  3148.  palette%?I%<>nk%?I% t%=
  3149.  ncol>16 
  3150.  t% m$="D"
  3151.  ncol=15 
  3152.  t% m$="T"
  3153.  m$="R" 
  3154.  sx%*xmul%/xdiv%*sy%*ymul%/ydiv%<200000 k%=3 
  3155.  k%=4
  3156. nk%=8-k%
  3157. t%=1<<nk%
  3158. mask%=t%-1
  3159. td2%=1<<nk%-1
  3160. step%=1<<(8-k%)
  3161. %ncol%=ncol+1:
  3162.  ncol%=64 ncol%=256
  3163. ict%=
  3164. dim(2^(k%*3)*4-1)
  3165.  cache%<8192*6 scratch%=
  3166. dim(8192*6):scratchsz%=8192*6 
  3167.  scratch%=datacache%:scratchsz%=cache%
  3168.  info% 
  3169. "Begin table generation with ";scratchsz%" bytes."
  3170.  Z%=0
  3171. P%=code%
  3172. [OPT Z%
  3173. .make%
  3174. STMFD r13!,{r14}
  3175. LDR r4,ict
  3176. MOV r2,#step%/2
  3177. .blueloop
  3178. MOV r1,#step%/2
  3179. .greenloop
  3180. MOV r0,#step%/2
  3181. .redloop
  3182. MOV r3,r0,LSR #nk%
  3183. MOV r14,r1,LSR #nk%
  3184. MOV r5,r2,LSR #nk%
  3185. R r3,r3,r14,LSL #k%
  3186. R r3,r3,r5,LSL #k%*2
  3187. BL devious
  3188. ADD r0,r0,#step%*2
  3189. CMP r0,#256
  3190. BCC redloop
  3191. ADD r1,r1,#step%
  3192. CMP r1,#256
  3193. BCC greenloop
  3194. ADD r2,r2,#step%
  3195. CMP r2,#256
  3196. BCC blueloop
  3197. LDMFD r13!,{pc}^
  3198. .ct DCD palette%
  3199. .min DCD code%+8192-256*2*4
  3200. .ict DCD ict%
  3201. .fsaad DCD scratch%
  3202. #.fsalim DCD scratch%+scratchsz%
  3203. .devious
  3204. &STMFD r13!,{r0,r1,r2,r3,r4,r8,r14}
  3205. BIC r0,r0,#(mask%<<1)+1
  3206. BIC r1,r1,#mask%
  3207. BIC r2,r2,#mask%
  3208. MOV r5,#0
  3209. LDR r6,ct
  3210. MOV r9,#&ff0000
  3211. MOV r14,#&ff0000
  3212. LDR r12,min
  3213. .devloop
  3214. LDR r7,[r6,r5,LSL #2]
  3215. MOV r8,r7,lsr #16
  3216. BIC r10,r8,#mask%
  3217. ADD r11,r2,#t%
  3218. CMP r10,r2
  3219. BEQ blueequal
  3220. SUBCC r10,r2,r8
  3221. SUBCC r11,r11,r8
  3222. SUBCS r10,r8,r11
  3223. SUBCS r11,r8,r2
  3224. MUL r3,r10,r10
  3225. .doneblue
  3226. MUL r4,r11,r11
  3227. MOV r8,r7,lsr #8
  3228.  r8,r8,#255
  3229. BIC r10,r8,#mask%
  3230. ADD r11,r1,#t%
  3231. CMP r10,r1
  3232. BEQ greenequal
  3233. SUBCC r10,r1,r8
  3234. SUBCC r11,r11,r8
  3235. SUBCS r10,r8,r11
  3236. SUBCS r11,r8,r1
  3237. MUL r8,r10,r10
  3238. ADD r8,r8,r8,LSL #2
  3239. ADD r3,r3,r8,LSL #1
  3240. .donegreen
  3241. MUL r8,r11,r11
  3242. ADD r8,r8,r8,LSL #2
  3243. ADD r4,r4,r8,LSL #1
  3244.  r8,r7,#255
  3245. BIC r10,r8,#mask%
  3246. ADD r11,r0,#t%
  3247. CMP r10,r0
  3248. BEQ redequal0
  3249. SUBCC r10,r0,r8
  3250. SUBCC r11,r11,r8
  3251. SUBCS r10,r8,r11
  3252. SUBCS r11,r8,r0
  3253. MUL r7,r10,r10
  3254. ADD r7,r7,r7,LSL #1
  3255. ADD r7,r3,r7
  3256. STR r7,[r12,r5,LSL #2]
  3257. .donered0
  3258. MUL r7,r11,r11
  3259. ADD r7,r7,r7,LSL #1
  3260. ADD r7,r4,r7
  3261. CMP r7,r9
  3262. MOVCC r9,r7
  3263. ADD r7,r0,#t%
  3264. BIC r10,r8,#mask%
  3265. ADD r11,r7,#t%
  3266. CMP r10,r7
  3267. BEQ redequal1
  3268. SUBCC r10,r7,r8
  3269. SUBCC r11,r11,r8
  3270. SUBCS r10,r8,r11
  3271. SUBCS r11,r8,r7
  3272. MUL r7,r10,r10
  3273. ADD r7,r7,r7,LSL #1
  3274. ADD r3,r3,r7
  3275. .donered1
  3276. ADD r7,r5,#ncol%
  3277. STR r3,[r12,r7,LSL #2]
  3278. MUL r7,r11,r11
  3279. ADD r7,r7,r7,LSL #1
  3280. ADD r7,r4,r7
  3281. CMP r7,r14
  3282. MOVCC r14,r7
  3283. ADD r5,r5,#1
  3284. CMP r5,#ncol%
  3285. BCC devloop
  3286. LDMFD r13!,{r0,r1,r2,r3,r4}
  3287. LDR r5,fsaad
  3288. MOV r7,r5
  3289. MOV r10,#0
  3290. .calcnum0
  3291. LDMIA r12!,{r8,r11}
  3292. CMP r8,r9
  3293. STRLEB r10,[r7],#1
  3294. ADD r10,r10,#1
  3295. CMP r11,r9
  3296. STRLEB r10,[r7],#1
  3297. ADD r10,r10,#1
  3298. LDMIA r12!,{r8,r11}
  3299. CMP r8,r9
  3300. STRLEB r10,[r7],#1
  3301. ADD r10,r10,#1
  3302. CMP r11,r9
  3303. STRLEB r10,[r7],#1
  3304. ADD r10,r10,#1
  3305. CMP r10,#ncol%
  3306. BCC calcnum0
  3307. SUBS r10,r7,r5
  3308. SWIEQ 256+
  3309. CMP r10,#4 ;if<4 then
  3310. O#MOVCC r7,r5 ;reset list pointer
  3311. P"LDRCCB r5,[r7] ;first possible
  3312. Q&LDRCCB r8,[r7,#1] ;second possible
  3313. RCC r5,r5,r8,lsl #8
  3314. S%LDRCCB r8,[r7,#2] ;third possible
  3315. RCC r5,r5,r8,lsl #16
  3316. ADD r5,r5,r10,lsl #24
  3317. BIC r10,r3,#1
  3318. STR r5,[r4,r10,LSL #2]
  3319. MOV r5,r7
  3320. MOV r10,#0
  3321. .calcnum1
  3322. LDMIA r12!,{r8,r11}
  3323. CMP r8,r14
  3324. STRLEB r10,[r7],#1
  3325. ADD r10,r10,#1
  3326. CMP r11,r14
  3327. STRLEB r10,[r7],#1
  3328. ADD r10,r10,#1
  3329. LDMIA r12!,{r8,r11}
  3330. CMP r8,r14
  3331. STRLEB r10,[r7],#1
  3332. ADD r10,r10,#1
  3333. CMP r11,r14
  3334. STRLEB r10,[r7],#1
  3335. ADD r10,r10,#1
  3336. CMP r10,#ncol%
  3337. BCC calcnum1
  3338. SUBS r10,r7,r5
  3339. SWIEQ 256+
  3340. CMP r10,#4 ;if<4 then
  3341. MOVCC r7,r5
  3342. LDRCCB r5,[r7]
  3343. LDRCCB r8,[r7,#1]
  3344. RCC r5,r5,r8,lsl #8
  3345. LDRCCB r8,[r7,#2]
  3346. RCC r5,r5,r8,lsl #16
  3347. ADD r5,r5,r10,lsl #24
  3348. R r10,r3,#1
  3349. STR r5,[r4,r10,LSL #2]
  3350. STR r7,fsaad
  3351. LDR r8,fsalim
  3352. CMP r7,r8
  3353. SWICS 256+
  3354. LDMFD r13!,{r8,pc}^
  3355. .redequal0
  3356. STR r3,[r12,r5,LSL #2]
  3357. TST r8,#td2%
  3358. SUBNE r11,r8,r0
  3359. SUBEQ r11,r11,r8
  3360. B donered0
  3361. .redequal1
  3362. TST r8,#td2%
  3363. SUBNE r11,r8,r7
  3364. SUBEQ r11,r11,r8
  3365. B donered1
  3366. .greenequal
  3367. TST r8,#td2%
  3368. SUBNE r11,r8,r1
  3369. SUBEQ r11,r11,r8
  3370. B donegreen
  3371. .blueequal
  3372. MOV r3,#0
  3373. TST r8,#td2%
  3374. SUBNE r11,r8,r2
  3375. SUBEQ r11,r11,r8
  3376. B doneblue
  3377.  make%
  3378.  info% 
  3379. "Generated 'r'";k%" tables for ";ncol%" colours using ";!fsaad-scratch%" bytes, taking "
  3380. -I%" cS"
  3381. %safesubict%=
  3382. dim(!fsaad-scratch%)
  3383.  I%=0
  3384. !fsaad-scratch%+4
  3385. 4:safesubict%!I%=scratch%!I%:
  3386.  I%=0
  3387. 2^(k%*3)*4-1
  3388. (ict%!I%>>>24)>3 ict%!I%=ict%!I%-scratch%+safesubict%
  3389.  fast% 
  3390.  -1,-9:col=0
  3391.  -3,-4,-5,-6,-7,-8,-10:col=2
  3392.  m$="D" 
  3393.  ncol=3 m$=""
  3394. 1col=0:
  3395.  ncol>15 
  3396. m$="C" 
  3397. m$="D" 
  3398. m$="R" col=2
  3399.  ncol=63 
  3400.  ncol=255 
  3401.  m$="D" col=0:ncol=256
  3402.  ncol=1 
  3403. "C":col=0:x%=x%+1
  3404. "D":col=0:x%=x%+3
  3405. "T":col=0:x%=x%+1
  3406.  cl%(x%+7,col)
  3407.  xl%(x%+7,col),xp%(sx%+7,col)
  3408.  xl2%(x%+7,col)
  3409.  sharpen% 
  3410.  order% 
  3411.  rm%(sx%+7,col),rm1%(sx%+7,col),rm2%(sx%+7,col)
  3412.  rm%(x%+7,col),rm1%(x%+7,col),rm2%(x%+7,col)
  3413.  hist%
  3414. equal% 
  3415.  vals%(256,col)
  3416.  nl%(x%+7,col)
  3417. totvals%=x%*(col+1)
  3418. totvals2%=sx%*(col+1)
  3419. 2:P%=code%
  3420.  ncol 
  3421.  2^24-1
  3422. [OPT Z
  3423. .div255
  3424.  I%=0
  3425. 2^p6bits-1
  3426. [OPT Z
  3427. EQUD I%/(2^p6bits-1)*F
  3428. [OPT Z
  3429. STMFD SP !,{R14}
  3430.  LDR R1,[R9,#5*8]:LDR R1,[R1]
  3431. LDR R10,[R9,#4*8]
  3432. LDR R11,[R9,#3*8]
  3433. #LDR R12,[R9,#2*8]:LDR R12,[R12]
  3434. LDR R8,[R9,#8]:LDR R8,[R8]
  3435. LDR R9,[R9]:LDR R9,[R9]
  3436. LDR R4,[R10]
  3437. LDR R5,[R10,#4]
  3438. LDR R6,[R10,#8]
  3439. ADR R7,div255
  3440. .fsloop
  3441. ADD R10,R10,R8
  3442. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  3443. WSUB R0,R4,R4,LSR #p6bits:ADD R0,R0,#1<<(bits-p6bits-1):MOV R0,R0,LSR #(bits-p6bits)
  3444. &LDR R2,[R7,R0,LSL #2]:SUB R4,R4,R2
  3445. %CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
  3446. jSUB R3,R5,R5,LSR #p6bits:ADD R3,R3,#1<<(bits-p6bits-1):MOV R3,R3,LSR #(bits-p6bits):
  3447. R R0,R0,R3,LSL #8
  3448. &LDR R2,[R7,R3,LSL #2]:SUB R5,R5,R2
  3449. %CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
  3450. kSUB R3,R6,R6,LSR #p6bits:ADD R3,R3,#1<<(bits-p6bits-1):MOV R3,R3,LSR #(bits-p6bits):
  3451. R R0,R0,R3,LSL #16
  3452. &LDR R2,[R7,R3,LSL #2]:SUB R6,R6,R2
  3453. DSTRB R0,[R12]:MOV R0,R0,LSR #8:STRB R0,[R12,#1]:MOV R0,R0,LSR #8
  3454. STRB R0,[R12,#2]
  3455.  m=-8 
  3456. [OPT Z
  3457. ADD R12,R12,R1,LSL #2
  3458. [OPT Z
  3459. (ADD R12,R12,R1,LSL #1:ADD R12,R12,R1
  3460.  dither% 
  3461. [OPT Z
  3462. ADD R0,R11,#4
  3463. ADD R2,R4,R4,LSL #1
  3464. (LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  3465. STR R3,[R11,-R8]
  3466. ADD R2,R4,R4,LSL #2
  3467. $LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  3468. STR R3,[R11]
  3469. MOV R3,R4,ASR #4
  3470. STR R3,[R11,R8]!
  3471. RSB R2,R4,R4,LSL #3
  3472. LDR R4,[R10]
  3473. ADD R4,R4,R2,ASR #4
  3474. ADD R2,R5,R5,LSL #1
  3475. 'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
  3476. STR R3,[R0,-R8]
  3477. MOV R3,R5,ASR #4
  3478. STR R3,[R0,R8]
  3479. ADD R2,R5,R5,LSL #2
  3480. #LDR R3,[R0]:ADD R3,R3,R2,ASR #4
  3481. STR R3,[R0],#4
  3482. RSB R2,R5,R5,LSL #3
  3483. LDR R5,[R10,#4]
  3484. ADD R5,R5,R2,ASR #4
  3485. ADD R2,R6,R6,LSL #1
  3486. 'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
  3487. STR R3,[R0,-R8]
  3488. ADD R2,R6,R6,LSL #2
  3489. #LDR R3,[R0]:ADD R3,R3,R2,ASR #4
  3490. STR R3,[R0]
  3491. MOV R3,R6,ASR #4
  3492. STR R3,[R0,R8]
  3493. RSB R2,R6,R6,LSL #3
  3494. LDR R6,[R10,#8]
  3495. ADD R6,R6,R2,ASR #4
  3496. [OPT Z
  3497. LDMIA R10,{R4,R5,R6}
  3498. [OPT Z
  3499. SUBS R9,R9,#1:BNE fsloop
  3500. LDMFD SP !,{PC}^
  3501.  2^15-1
  3502. [OPT Z
  3503. .div31
  3504.  I%=0
  3505. [OPT Z
  3506. EQUD I%/31*F
  3507. [OPT Z
  3508. STMFD SP !,{R14}
  3509.     # LDR R1,[R9,#5*8]:LDR R1,[R1]
  3510. LDR R10,[R9,#4*8]
  3511. LDR R11,[R9,#3*8]
  3512.     &#LDR R12,[R9,#2*8]:LDR R12,[R12]
  3513. LDR R8,[R9,#8]:LDR R8,[R8]
  3514. LDR R9,[R9]:LDR R9,[R9]
  3515. LDR R4,[R10]
  3516. LDR R5,[R10,#4]
  3517. LDR R6,[R10,#8]
  3518. ADR R7,div31
  3519. .fsloop
  3520. ADD R10,R10,R8
  3521.     /%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  3522.     0FSUB R0,R4,R4,LSR #5:ADD R0,R0,#1<<(bits-6):MOV R0,R0,LSR #(bits-5)
  3523.     1&LDR R2,[R7,R0,LSL #2]:SUB R4,R4,R2
  3524.     2%CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
  3525.     3YSUB R3,R5,R5,LSR #5:ADD R3,R3,#1<<(bits-6):MOV R3,R3,LSR #(bits-5):
  3526. R R0,R0,R3,LSL #5
  3527.     4&LDR R2,[R7,R3,LSL #2]:SUB R5,R5,R2
  3528.     5%CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
  3529.     6ZSUB R3,R6,R6,LSR #5:ADD R3,R3,#1<<(bits-6):MOV R3,R3,LSR #(bits-5):
  3530. R R0,R0,R3,LSL #10
  3531.     7&LDR R2,[R7,R3,LSL #2]:SUB R6,R6,R2
  3532.     8ISTRB R0,[R12]:MOV R0,R0,LSR #8:STRB R0,[R12,#1]:ADD R12,R12,R1,LSL #1
  3533.  dither% 
  3534. [OPT Z
  3535. ADD R0,R11,#4
  3536. ADD R2,R4,R4,LSL #1
  3537.     >(LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  3538. STR R3,[R11,-R8]
  3539. ADD R2,R4,R4,LSL #2
  3540.     A$LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  3541. STR R3,[R11]
  3542. MOV R3,R4,ASR #4
  3543. STR R3,[R11,R8]!
  3544. RSB R2,R4,R4,LSL #3
  3545. LDR R4,[R10]
  3546. ADD R4,R4,R2,ASR #4
  3547. ADD R2,R5,R5,LSL #1
  3548.     I'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
  3549. STR R3,[R0,-R8]
  3550. MOV R3,R5,ASR #4
  3551. STR R3,[R0,R8]
  3552. ADD R2,R5,R5,LSL #2
  3553.     N#LDR R3,[R0]:ADD R3,R3,R2,ASR #4
  3554. STR R3,[R0],#4
  3555. RSB R2,R5,R5,LSL #3
  3556. LDR R5,[R10,#4]
  3557. ADD R5,R5,R2,ASR #4
  3558. ADD R2,R6,R6,LSL #1
  3559.     T'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
  3560. STR R3,[R0,-R8]
  3561. ADD R2,R6,R6,LSL #2
  3562.     W#LDR R3,[R0]:ADD R3,R3,R2,ASR #4
  3563. STR R3,[R0]
  3564. MOV R3,R6,ASR #4
  3565. STR R3,[R0,R8]
  3566. RSB R2,R6,R6,LSL #3
  3567. LDR R6,[R10,#8]
  3568. ADD R6,R6,R2,ASR #4
  3569. [OPT Z
  3570. LDMIA R10,{R4,R5,R6}
  3571. [OPT Z
  3572. SUBS R9,R9,#1:BNE fsloop
  3573. LDMFD SP !,{PC}^
  3574. [OPT Z
  3575. .div255
  3576.  I%=0
  3577. [OPT Z
  3578. EQUD I%/255*F
  3579. [OPT Z
  3580. STMFD SP !,{R14}
  3581. LDR R10,[R9,#4*8]
  3582. ADR R7,div255
  3583.     v LDR R1,[R9,#5*8]:LDR R1,[R1]
  3584. LDR R11,[R9,#3*8]
  3585.     x#LDR R12,[R9,#2*8]:LDR R12,[R12]
  3586. LDR R8,[R9,#8]:LDR R8,[R8]
  3587. LDR R9,[R9]:LDR R9,[R9]
  3588. LDR R4,[R10],R8
  3589. .fsloop
  3590.     }%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  3591.     ~WSUB R0,R4,R4,LSR #8:ADD R0,R0,#1<<(bits-9):MOV R0,R0,LSR #(bits-8):STRB R0,[R12],R1
  3592. LDR R2,[R7,R0,LSL #2]
  3593.  dither% 
  3594. [OPT Z
  3595. SUB R4,R4,R2
  3596. MOVCS R4,#0
  3597. ADD R2,R4,R4,LSL #1
  3598. (LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  3599. STR R3,[R11,-R8]
  3600. ADD R2,R4,R4,LSL #2
  3601. $LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  3602. STR R3,[R11]
  3603. MOV R3,R4,ASR #4
  3604. STR R3,[R11,R8]!
  3605. RSB R2,R4,R4,LSL #3
  3606. LDR R4,[R10],R8
  3607. ADD R4,R4,R2,ASR #4
  3608. [OPT Z
  3609. LDR R4,[R10],R8
  3610. [OPT Z
  3611. SUBS R9,R9,#1:BNE fsloop
  3612. LDMFD SP !,{PC}^
  3613.  63,255
  3614. div15=P%:
  3615.  I%=0
  3616. 255*4
  3617. [OPT Z
  3618.  EQUD (palette%!I%
  3619. &FF)/255*F
  3620. #EQUD (palette%!I%>>8
  3621. &FF)/255*F
  3622. $EQUD (palette%!I%>>16
  3623. &FF)/255*F
  3624.  m$="R" 
  3625. [OPT Z
  3626. .ictloc EQUD ict%
  3627. [OPT Z
  3628. EQUD div15
  3629. STMFD SP !,{R14}
  3630.  LDR R1,[R9,#5*8]:LDR R1,[R1]
  3631. LDR R10,[R9,#4*8]
  3632. LDR R11,[R9,#3*8]
  3633. #LDR R12,[R9,#2*8]:LDR R12,[R12]
  3634. LDR R8,[R9,#8]:LDR R8,[R8]
  3635. LDR R9,[R9]:LDR R9,[R9]
  3636. LDR R4,[R10]
  3637. LDR R5,[R10,#4]
  3638. LDR R6,[R10,#8]
  3639. LDR R7,fs%-4
  3640. .fsloop
  3641. ADD R10,R10,R8
  3642. [OPT Z
  3643. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  3644. 3MOV R0,R4,LSR #(bits-4):CMP R0,#15:MOVCS R0,#15
  3645. %CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
  3646. FMOV R3,R5,LSR #(bits-4):CMP R3,#15:MOVCS R3,#15:
  3647. R R0,R0,R3,LSL #4
  3648. %CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
  3649. FMOV R3,R6,LSR #(bits-4):CMP R3,#15:MOVCS R3,#15:
  3650. R R0,R0,R3,LSL #8
  3651. LDR R3,colmatchloc
  3652. LDRB R0,[R3,R0]
  3653. +ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2
  3654. LDR R2,[R3],#4:SUB R4,R4,R2
  3655. .LDMIA R3,{R2,R3}:SUB R5,R5,R2:SUB R6,R6,R3
  3656. srchdevlist
  3657. [OPT Z
  3658. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  3659. %CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
  3660. %CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
  3661. STMFD SP !,{R7,R8,R9}
  3662. MVN R2,#0
  3663. MOV R3,#&30<<23
  3664. .srch RSB R7,R3,#&20<<23
  3665. MOV R8,R6,LSR #bits-8
  3666. SUB R8,R8,R8,LSR #4
  3667. ADDS R7,R7,R8,LSL #23
  3668. MOVVSS R7,#&7F000000
  3669. MOVMI R7,#0
  3670.  R7,R7,#&60000000
  3671. ADD R7,R7,R3
  3672. ADD R14,R7,R7,LSR #4
  3673. ADD R7,R14,R14,LSR #8
  3674. ADD R7,R7,R7,LSR #16
  3675. SUBS R8,R6,R7,LSR #31-bits
  3676. RSBLT R8,R8,#0
  3677. MOV R8,R8,LSR #bits/2
  3678. MUL R9,R8,R8
  3679. RSB R7,R3,#&20<<23
  3680. MOV R8,R5,LSR #bits-8
  3681. SUB R8,R8,R8,LSR #4
  3682. ADDS R7,R7,R8,LSL #23
  3683. MOVVSS R7,#&7F000000
  3684. MOVMI R7,#0
  3685.  R7,R7,#&60000000
  3686. ADD R7,R3,R7
  3687. ADD R7,R7,R7,LSR #4
  3688. R R14,R14,R7,LSR #8
  3689. ADD R7,R7,R7,LSR #8
  3690. ADD R7,R7,R7,LSR #16
  3691. SUBS R8,R5,R7,LSR #31-bits
  3692. RSBLT R8,R8,#0
  3693. MOV R8,R8,LSR #bits/2
  3694. MUL R7,R8,R8
  3695. ADD R7,R7,R7,LSL #2
  3696. ADD R9,R9,R7,LSL #1
  3697. RSB R7,R3,#&20<<23
  3698. MOV R8,R4,LSR #bits-8
  3699. SUB R8,R8,R8,LSR #4
  3700. ADDS R7,R7,R8,LSL #23
  3701. MOVVSS R7,#&7F000000
  3702. MOVMI R7,#0
  3703.  R7,R7,#&60000000
  3704. ADD R7,R3,R7
  3705. ADD R7,R7,R7,LSR #4
  3706. R R14,R14,R7,LSR #16
  3707. ADD R7,R7,R7,LSR #8
  3708. ADD R7,R7,R7,LSR #16
  3709. SUBS R8,R4,R7,LSR #31-bits
  3710. RSBLT R8,R8,#0
  3711. MOV R8,R8,LSR #bits/2
  3712. MUL R7,R8,R8
  3713. ADD R7,R7,R7,LSL #1
  3714. ADD R9,R9,R7
  3715. CMP R9,R2
  3716. MOVLS R2,R9
  3717. MOVLS R0,R14
  3718. SUBS R3,R3,#&10<<23
  3719. BGE srch
  3720.  R7,R0,#&40000000
  3721. MOV R8,R7,LSR #23
  3722.  R7,R0,#&600000
  3723. R R8,R8,R7,LSR #16
  3724.  R7,R0,#&4000
  3725. R R8,R8,R7,LSR #10
  3726.  R7,R0,#&20000000
  3727. R R8,R8,R7,LSR #26
  3728.  R7,R0,#&3800
  3729. R R0,R8,R7,LSR #11
  3730. LDMFD SP !,{R7,R8,R9}
  3731. +ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2
  3732. LDR R2,[R3],#4:SUB R4,R4,R2
  3733. .LDMIA R3,{R2,R3}:SUB R5,R5,R2:SUB R6,R6,R3
  3734. [OPT Z
  3735. STRB R0,[R12],R1
  3736.  dither% 
  3737. [OPT Z
  3738. ADD R0,R11,#4
  3739. ADD R2,R4,R4,LSL #1
  3740.  (LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  3741. STR R3,[R11,-R8]
  3742. ADD R2,R4,R4,LSL #2
  3743. #$LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  3744. STR R3,[R11]
  3745. MOV R3,R4,ASR #4
  3746. STR R3,[R11,R8]!
  3747. RSB R2,R4,R4,LSL #3
  3748. LDR R4,[R10]
  3749. ADD R4,R4,R2,ASR #4
  3750. ADD R2,R5,R5,LSL #1
  3751. +'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
  3752. STR R3,[R0,-R8]
  3753. MOV R3,R5,ASR #4
  3754. STR R3,[R0,R8]
  3755. ADD R2,R5,R5,LSL #2
  3756. 0#LDR R3,[R0]:ADD R3,R3,R2,ASR #4
  3757. STR R3,[R0],#4
  3758. RSB R2,R5,R5,LSL #3
  3759. LDR R5,[R10,#4]
  3760. ADD R5,R5,R2,ASR #4
  3761. ADD R2,R6,R6,LSL #1
  3762. 6'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
  3763. STR R3,[R0,-R8]
  3764. ADD R2,R6,R6,LSL #2
  3765. 9#LDR R3,[R0]:ADD R3,R3,R2,ASR #4
  3766. STR R3,[R0]
  3767. MOV R3,R6,ASR #4
  3768. STR R3,[R0,R8]
  3769. RSB R2,R6,R6,LSL #3
  3770. LDR R6,[R10,#8]
  3771. ADD R6,R6,R2,ASR #4
  3772. [OPT Z
  3773. LDMIA R10,{R4,R5,R6}
  3774. [OPT Z
  3775. SUBS R9,R9,#1:BNE fsloop
  3776. LDMFD SP !,{PC}^
  3777. divtable=P%:
  3778.  I%=0
  3779. [OPT Z
  3780. P&EQUD (palette%!I%>>4
  3781. &F)/bright%*F
  3782. Q'EQUD (palette%!I%>>12
  3783. &F)/bright%*F
  3784. R'EQUD (palette%!I%>>20
  3785. &F)/bright%*F
  3786. [OPT Z
  3787. .ictloc EQUD ict%
  3788.  I%=0
  3789. [OPT Z
  3790. EQUD I%/bright%*F
  3791.  I%=0
  3792. [OPT Z
  3793. EQUD I%/(bright%
  3794. [OPT Z
  3795. STMFD SP !,{R14}
  3796. h LDR R1,[R9,#5*8]:LDR R1,[R1]
  3797. LDR R10,[R9,#4*8]
  3798. LDR R11,[R9,#3*8]
  3799. k#LDR R12,[R9,#2*8]:LDR R12,[R12]
  3800. LDR R8,[R9,#8]:LDR R8,[R8]
  3801. LDR R9,[R9]:LDR R9,[R9]
  3802.  m$="D" 
  3803. m$="R" 
  3804. [OPT Z
  3805. LDR R4,[R10]
  3806. LDR R5,[R10,#4]
  3807. LDR R6,[R10,#8]
  3808. [OPT Z
  3809. LDR R4,[R10],R8
  3810.  m$<>"D" 
  3811. [OPT Z
  3812. ADR R7,divtable
  3813. [OPT Z
  3814. .fsloop
  3815. [OPT Z
  3816. ADD R10,R10,R8
  3817. srchdevlist
  3818. [OPT Z
  3819. MOV r3,r0
  3820. [OPT Z
  3821. ADD R10,R10,R8
  3822. MOV R3,#0
  3823. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  3824. CMP R4,#F>>1
  3825.  SUBCS R4,R4,#F:
  3826. RCS R3,R3,#1
  3827. %CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
  3828. CMP R5,#F>>1
  3829.  SUBCS R5,R5,#F:
  3830. RCS R3,R3,#2
  3831. %CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
  3832. CMP R6,#F>>1
  3833.  SUBCS R6,R6,#F:
  3834. RCS R3,R3,#4
  3835. [OPT Z
  3836. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  3837. ;RSB R3,R4,R4,LSL #4:ADD R3,R3,#F>>1:MOV R3,R3,LSR #bits
  3838. LDR R2,[R7,R3,LSL #2]
  3839. SUB R4,R4,R2
  3840. [OPT Z
  3841. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  3842. ;RSB R3,R4,R4,LSL #3:ADD R3,R3,#F>>1:MOV R3,R3,LSR #bits
  3843. LDR R2,[R7,R3,LSL #2]
  3844. SUB R4,R4,R2
  3845. [OPT Z
  3846. MOV R2,R12,LSR #1
  3847. TST R12,#1
  3848. LDRB R0,[R2]
  3849. EQ R0,R0,#&F0:
  3850. REQ R0,R0,R3
  3851. NE R0,R0,#&0F:
  3852. RNE R0,R0,R3,LSL #4
  3853. STRB R0,[R2]
  3854. ADD R12,R12,R1
  3855.  m$="D" 
  3856. m$="R" 
  3857.  dither% 
  3858. [OPT Z
  3859. ADD R0,R11,#4
  3860. ADD R2,R4,R4,LSL #1
  3861. (LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  3862. STR R3,[R11,-R8]
  3863. ADD R2,R4,R4,LSL #2
  3864. $LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  3865. STR R3,[R11]
  3866. MOV R3,R4,ASR #4
  3867. STR R3,[R11,R8]!
  3868. RSB R2,R4,R4,LSL #3
  3869. LDR R4,[R10]
  3870. ADD R4,R4,R2,ASR #4
  3871. ADD R2,R5,R5,LSL #1
  3872. 'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
  3873. STR R3,[R0,-R8]
  3874. MOV R3,R5,ASR #4
  3875. STR R3,[R0,R8]
  3876. ADD R2,R5,R5,LSL #2
  3877. #LDR R3,[R0]:ADD R3,R3,R2,ASR #4
  3878. STR R3,[R0],#4
  3879. RSB R2,R5,R5,LSL #3
  3880. LDR R5,[R10,#4]
  3881. ADD R5,R5,R2,ASR #4
  3882. ADD R2,R6,R6,LSL #1
  3883. 'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
  3884. STR R3,[R0,-R8]
  3885. ADD R2,R6,R6,LSL #2
  3886. #LDR R3,[R0]:ADD R3,R3,R2,ASR #4
  3887. STR R3,[R0]
  3888. MOV R3,R6,ASR #4
  3889. STR R3,[R0,R8]
  3890. RSB R2,R6,R6,LSL #3
  3891. LDR R6,[R10,#8]
  3892. ADD R6,R6,R2,ASR #4
  3893. [OPT Z
  3894. LDMIA R10,{R4,R5,R6}
  3895.  dither% 
  3896. [OPT Z
  3897. ADD R2,R4,R4,LSL #1
  3898. (LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  3899. STR R3,[R11,-R8]
  3900. ADD R2,R4,R4,LSL #2
  3901. $LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  3902. STR R3,[R11]
  3903. MOV R3,R4,ASR #4
  3904. STR R3,[R11,R8]!
  3905. RSB R2,R4,R4,LSL #3
  3906. LDR R4,[R10],R8
  3907. ADD R4,R4,R2,ASR #4
  3908. [OPT Z
  3909. LDR R4,[R10],R8
  3910. [OPT Z
  3911. SUBS R9,R9,#1:BNE fsloop
  3912. LDMFD SP !,{PC}^
  3913. divtable=P%:
  3914.  I%=0
  3915. [OPT Z
  3916. &EQUD (palette%!I%>>4
  3917. &F)/bright%*F
  3918. 'EQUD (palette%!I%>>12
  3919. &F)/bright%*F
  3920. 'EQUD (palette%!I%>>20
  3921. &F)/bright%*F
  3922. [OPT Z
  3923. EQUD 0
  3924. EQUD 1/(bright%
  3925. EQUD 2/(bright%
  3926. EQUD F
  3927. [OPT Z
  3928. STMFD SP !,{R14}
  3929.  LDR R1,[R9,#5*8]:LDR R1,[R1]
  3930. LDR R10,[R9,#4*8]
  3931. LDR R11,[R9,#3*8]
  3932. LDR R12,[R9,#2*8]
  3933. LDR R12,[R12]
  3934. LDR R8,[R9,#8]
  3935. LDR R8,[R8]
  3936. LDR R9,[R9]
  3937. LDR R9,[R9]
  3938.  m$="C" 
  3939. m$="R" 
  3940. [OPT Z
  3941. LDR R4,[R10]
  3942. LDR R5,[R10,#4]
  3943. LDR R6,[R10,#8]
  3944. [OPT Z
  3945. LDR R4,[R10],R8
  3946. [OPT Z
  3947. .fsloop
  3948.  m$<>"C"
  3949. [OPT Z
  3950. ADR R7,divtable
  3951. [OPT Z
  3952. ADD R10,R10,R8
  3953. ,%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  3954. -%CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
  3955. .%CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
  3956. MOV R3,#0
  3957. CMP R4,#F>>1:
  3958. RCS R3,R3,#1
  3959. CMP R5,#F>>1:
  3960. RCS R3,R3,#2
  3961. CMP R6,#F>>1:
  3962. RCS R3,R3,#4
  3963. 3"CMP R3,#6:
  3964. Q R3,#1:BEQ octcyan
  3965. BCS octwhite
  3966. CMP R3,#4:BEQ octblue
  3967. MOVCS R3,#2:BCS octmagenta
  3968. CMP R3,#2:BEQ octgreen
  3969. BCS octyellow
  3970. CMP R3,#0:BEQ octblack
  3971. .octred
  3972. RSB R0,R4,#F
  3973. CMP R5,R0
  3974. BLT octred1
  3975. CMP R5,R6
  3976. MOVGE R3,#3
  3977. MOVLT R3,#2
  3978. B octconvert
  3979. .octred1
  3980. CMP R0,R6
  3981. MOVGE R3,#0
  3982. MOVLT R3,#2
  3983. B octconvert
  3984. .octgreen
  3985. RSB R0,R5,#F
  3986. CMP R0,R4
  3987. BLT octgreen1
  3988. CMP R0,R6
  3989. MOVGE R3,#0
  3990. MOVLT R3,#1
  3991. B octconvert
  3992. .octgreen1
  3993. CMP R4,R6
  3994. MOVGE R3,#3
  3995. MOVLT R3,#1
  3996. B octconvert
  3997. .octblue
  3998. RSB R0,R6,#F
  3999. CMP R0,R4
  4000. BLT octblue1
  4001. CMP R0,R5
  4002. MOVGE R3,#0
  4003. MOVLT R3,#1
  4004. B octconvert
  4005. .octblue1
  4006. CMP R4,R5
  4007. MOVGE R3,#2
  4008. MOVLT R3,#1
  4009. B octconvert
  4010. .octwhite
  4011. CMP R4,R5
  4012. BLT octwhite1
  4013. CMP R5,R6
  4014. MOVGE R3,#3
  4015. MOVLT R3,#2
  4016. B octconvert
  4017. .octwhite1
  4018. CMP R4,R6
  4019. MOVGE R3,#3
  4020. MOVLT R3,#1
  4021. .octconvert
  4022. CMP R3,#1
  4023. .octcyan
  4024. SUBEQ R5,R5,#F
  4025. SUBEQ R6,R6,#F
  4026. .octmagenta
  4027. CMP R3,#2
  4028. SUBEQ R4,R4,#F
  4029. SUBEQ R6,R6,#F
  4030. .octyellow
  4031. CMP R3,#3
  4032. SUBEQ R4,R4,#F
  4033. SUBEQ R5,R5,#F
  4034. .octblack
  4035. MOV R2,R12,LSR #2
  4036.  R7,R12,#3:MOV R7,R7,LSL #1
  4037. MOV R14,#3
  4038. }ELDRB R0,[R2]:BIC R0,R0,R14,LSL R7:
  4039. R R0,R0,R3,LSL R7:STRB R0,[R2]
  4040. ADD R12,R12,R1
  4041. [OPT Z
  4042. ADD R10,R10,R8
  4043. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4044. %CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
  4045. %CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
  4046. STMFD SP !,{R8,R9,R10}
  4047. MVN R2,#0
  4048. MOV R3,#3
  4049. .srch ADD R14,R3,R3,LSL #1
  4050. ADD R14,R7,R14,LSL #2
  4051. LDMIA R14,{R8,R9,R10}
  4052. SUBS R8,R4,R8
  4053. RSBMI R8,R8,#0
  4054. SUBS R9,R5,R9
  4055. RSBMI R9,R9,#0
  4056. SUBS R10,R6,R10
  4057. RSBMI R10,R10,#0
  4058. MOV R14,R8,LSR #bits/2
  4059. MUL R8,R14,R14
  4060. MOV R14,R9,LSR #bits/2
  4061. MUL R9,R14,R14
  4062. MOV R14,R10,LSR #bits/2
  4063. MUL R10,R14,R14
  4064. ADD R9,R9,R9,LSL #2
  4065. ADD R8,R8,R8,LSL #1
  4066. ADD R14,R8,R9,LSL #1
  4067. ADD R14,R14,R10
  4068. CMP R14,R2
  4069. MOVCC R2,R14
  4070. MOVCC R0,R3
  4071. SUBS R3,R3,#1
  4072. BPL srch
  4073. LDMFD SP !,{R8,R9,R10}
  4074. +ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2
  4075. LDR R2,[R3],#4:SUB R4,R4,R2
  4076. .LDMIA R3,{R2,R3}:SUB R5,R5,R2:SUB R6,R6,R3
  4077. MOV R3,R0
  4078. MOV R2,R12,LSR #2
  4079.  R7,R12,#3:MOV R7,R7,LSL #1
  4080. MOV R14,#3
  4081. ELDRB R0,[R2]:BIC R0,R0,R14,LSL R7:
  4082. R R0,R0,R3,LSL R7:STRB R0,[R2]
  4083. ADD R12,R12,R1
  4084. [OPT Z
  4085. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4086. :RSB R3,R4,R4,LSL #2:ADD R3,R3,#F>>1:MOV R3,R3,LSR#bits
  4087. LDR R2,[R7,R3,LSL #2]
  4088. SUB R4,R4,R2
  4089. MOV R2,R12,LSR #2
  4090.  R5,R12,#3:MOV R5,R5,LSL #1
  4091. MOV R6,#3
  4092. DLDRB R0,[R2]:BIC R0,R0,R6,LSL R5:
  4093. R R0,R0,R3,LSL R5:STRB R0,[R2]
  4094. ADD R12,R12,R1
  4095.  m$="C" 
  4096. m$="R" 
  4097.  dither% 
  4098. [OPT Z
  4099. ADD R0,R11,#4
  4100. ADD R2,R4,R4,LSL #1
  4101. (LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  4102. STR R3,[R11,-R8]
  4103. ADD R2,R4,R4,LSL #2
  4104. $LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  4105. STR R3,[R11]
  4106. MOV R3,R4,ASR #4
  4107. STR R3,[R11,R8]!
  4108. RSB R2,R4,R4,LSL #3
  4109. LDR R4,[R10]
  4110. ADD R4,R4,R2,ASR #4
  4111. ADD R2,R5,R5,LSL #1
  4112. 'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
  4113. STR R3,[R0,-R8]
  4114. MOV R3,R5,ASR #4
  4115. STR R3,[R0,R8]
  4116. ADD R2,R5,R5,LSL #2
  4117. #LDR R3,[R0]:ADD R3,R3,R2,ASR #4
  4118. STR R3,[R0],#4
  4119. RSB R2,R5,R5,LSL #3
  4120. LDR R5,[R10,#4]
  4121. ADD R5,R5,R2,ASR #4
  4122. ADD R2,R6,R6,LSL #1
  4123. 'LDR R3,[R0,-R8]:ADD R3,R3,R2,ASR #4
  4124. STR R3,[R0,-R8]
  4125. ADD R2,R6,R6,LSL #2
  4126. #LDR R3,[R0]:ADD R3,R3,R2,ASR #4
  4127. STR R3,[R0]
  4128. MOV R3,R6,ASR #4
  4129. STR R3,[R0,R8]
  4130. RSB R2,R6,R6,LSL #3
  4131. LDR R6,[R10,#8]
  4132. ADD R6,R6,R2,ASR #4
  4133. [OPT Z
  4134. LDMIA R10,{R4,R5,R6}
  4135.  dither% 
  4136. [OPT Z
  4137. ADD R2,R4,R4,LSL #1
  4138. (LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  4139. STR R3,[R11,-R8]
  4140. ADD R2,R4,R4,LSL #2
  4141. $LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  4142. STR R3,[R11]
  4143. MOV R3,R4,ASR #4
  4144. STR R3,[R11,R8]!
  4145. RSB R2,R4,R4,LSL #3
  4146. LDR R4,[R10],R8
  4147. ADD R4,R4,R2,ASR #4
  4148. [OPT Z
  4149. LDR R4,[R10],R8
  4150. [OPT Z
  4151. SUBS R9,R9,#1:BNE fsloop
  4152. LDMFD SP !,{PC}^
  4153. [OPT Z
  4154. .divtable EQUD 0
  4155. EQUD (1-black%/256*2)/16*F
  4156. EQUD (2-black%/256*4)/16*F
  4157. EQUD (3-black%/256*5)/16*F
  4158. EQUD (4-black%/256*6)/16*F
  4159. EQUD (5-black%/256*7)/16*F
  4160. EQUD (6-black%/256*8)/16*F
  4161. EQUD (7-black%/256*8)/16*F
  4162. EQUD (8-black%/256*8)/16*F
  4163. EQUD (9-black%/256*8)/16*F
  4164. EQUD (10-black%/256*8)/16*F
  4165. EQUD (11-black%/256*7)/16*F
  4166. EQUD (12-black%/256*6)/16*F
  4167. EQUD (13-black%/256*5)/16*F
  4168. EQUD (14-black%/256*4)/16*F
  4169. EQUD (15-black%/256*2)/16*F
  4170. EQUD F
  4171. .evenrow_gard DCD even_gard
  4172. .oddrow_gard DCD odd_gard
  4173. .rowinc DCD 0
  4174. STMFD SP !,{R14}
  4175.  LDR R1,[R9,#5*8]:LDR R1,[R1]
  4176. LDR R10,[R9,#4*8]
  4177. LDR R11,[R9,#3*8]
  4178. LDR R12,[R9,#2*8]
  4179. LDR R12,[R12]
  4180. LDR R8,[R9,#8]
  4181. LDR R8,[R8]
  4182. LDR R9,[R9]
  4183. LDR R9,[R9]
  4184. LDR R4,[R10],R8
  4185. TEQ R8,#0
  4186. LDRPL R6,evenrow_gard
  4187. LDRMI R6,oddrow_gard
  4188. MOV R1,R1,LSL #1
  4189. LDR R7,rowinc
  4190. ADR R14,divtable
  4191. .fsloop
  4192. (%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4193. ADD R5,R4,#F>>5
  4194. MOVS R5,R5,LSR #bits-4
  4195. LDRNE R0,[R14,R5,LSL #2]
  4196. SUBNE R4,R4,R0
  4197.  dither% 
  4198. [OPT Z
  4199. ADD R2,R4,R4,LSL #1
  4200. 1(LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  4201. STR R3,[R11,-R8]
  4202. ADD R2,R4,R4,LSL #2
  4203. 4$LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  4204. STR R3,[R11]
  4205. MOV R3,R4,ASR #4
  4206. STR R3,[R11,R8]!
  4207. RSB R2,R4,R4,LSL #3
  4208. LDR R4,[R10],R8
  4209. ADDS R4,R4,R2,ASR #4
  4210. [OPT Z
  4211. LDR R4,[R10],R8
  4212. [OPT Z
  4213. B%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4214. ADD R3,R4,#F>>5
  4215. MOVS R3,R3,LSR #bits-4
  4216. LDRNE R0,[R14,R3,LSL #2]
  4217. SUBNE R4,R4,R0
  4218. R R5,R5,R3,LSL #5:LDR R3,[R6,R5,LSL #2]
  4219. HFMOV R2,R12,LSR #1:STRB R3,[R2],R7:MOV R3,R3,LSR #8:STRB R3,[R2],R7
  4220. IBMOV R3,R3,LSR #8:STRB R3,[R2],R7:MOV R3,R3,LSR #8:STRB R3,[R2]
  4221. ADD R12,R12,R1
  4222.  dither% 
  4223. [OPT Z
  4224. ADD R2,R4,R4,LSL #1
  4225. O(LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  4226. STR R3,[R11,-R8]
  4227. ADD R2,R4,R4,LSL #2
  4228. R$LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  4229. STR R3,[R11]
  4230. MOV R3,R4,ASR #4
  4231. STR R3,[R11,R8]!
  4232. RSB R2,R4,R4,LSL #3
  4233. LDR R4,[R10],R8
  4234. ADD R4,R4,R2,ASR #4
  4235. [OPT Z
  4236. LDR R4,[R10],R8
  4237. [OPT Z
  4238. SUBS R9,R9,#2:BNE fsloop
  4239. LDMFD SP !,{PC}^
  4240. [OPT Z
  4241. .divtable EQUD 0
  4242. EQUD (1-black%/256*2)/9*F
  4243. EQUD (2-black%/256*4)/9*F
  4244. EQUD (3-black%/256*5)/9*F
  4245. EQUD (4-black%/256*6)/9*F
  4246. EQUD (5-black%/256*6)/9*F
  4247. EQUD (6-black%/256*5)/9*F
  4248. EQUD (7-black%/256*4)/9*F
  4249. EQUD (8-black%/256*2)/9*F
  4250. EQUD F
  4251. .evenrow_gard DCD even_gard
  4252. .oddrow_gard DCD odd_gard
  4253. .rowinc DCD 0
  4254. STMFD SP !,{R14}
  4255. t LDR R1,[R9,#5*8]:LDR R1,[R1]
  4256. LDR R10,[R9,#4*8]
  4257. LDR R11,[R9,#3*8]
  4258. LDR R12,[R9,#2*8]
  4259. LDR R12,[R12]
  4260. LDR R8,[R9,#8]
  4261. LDR R8,[R8]
  4262. LDR R9,[R9]
  4263. LDR R9,[R9]
  4264. LDR R4,[R10],R8
  4265. TEQ R8,#0
  4266. LDRPL R6,evenrow_gard
  4267. LDRMI R6,oddrow_gard
  4268. MOV R1,R1,LSL #1
  4269. LDR R7,rowinc
  4270. ADR R14,divtable
  4271. .fsloop
  4272. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4273. ADD R5,R4,#F>>4
  4274. ADD R5,R5,R5,LSL #3
  4275. MOVS R5,R5,LSR #bits
  4276. LDRNE R0,[R14,R5,LSL #2]
  4277. SUBNE R4,R4,R0
  4278.  dither% 
  4279. [OPT Z
  4280. ADD R2,R4,R4,LSL #1
  4281. (LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  4282. STR R3,[R11,-R8]
  4283. ADD R2,R4,R4,LSL #2
  4284. $LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  4285. STR R3,[R11]
  4286. MOV R3,R4,ASR #4
  4287. STR R3,[R11,R8]!
  4288. RSB R2,R4,R4,LSL #3
  4289. LDR R4,[R10],R8
  4290. ADDS R4,R4,R2,ASR #4
  4291. [OPT Z
  4292. LDR R4,[R10],R8
  4293. [OPT Z
  4294. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4295. ADD R3,R4,#F>>4
  4296. ADD R3,R3,R3,LSL #3
  4297. MOVS R3,R3,LSR #bits
  4298. LDRNE R0,[R14,R3,LSL #2]
  4299. SUBNE R4,R4,R0
  4300. R R5,R5,R3,LSL #4:LDR R5,[R6,R5,LSL #2]
  4301. MOV R2,R12,LSR #1
  4302.  R3,R5,#&3F
  4303. STRB R3,[R2],R7
  4304. !MOV R3,R5,LSR #6:
  4305.  R3,R3,#&3F
  4306. STRB R3,[R2],R7
  4307. "MOV R3,R5,LSR #12:STRB R3,[R2]
  4308. ADD R12,R12,R1
  4309.  dither% 
  4310. [OPT Z
  4311. ADD R2,R4,R4,LSL #1
  4312. (LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  4313. STR R3,[R11,-R8]
  4314. ADD R2,R4,R4,LSL #2
  4315. $LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  4316. STR R3,[R11]
  4317. MOV R3,R4,ASR #4
  4318. STR R3,[R11,R8]!
  4319. RSB R2,R4,R4,LSL #3
  4320. LDR R4,[R10],R8
  4321. ADD R4,R4,R2,ASR #4
  4322. [OPT Z
  4323. LDR R4,[R10],R8
  4324. [OPT Z
  4325. SUBS R9,R9,#2:BNE fsloop
  4326. LDMFD SP !,{PC}^
  4327. [OPT Z
  4328. .divtable EQUD 0
  4329. EQUD (1-black%/256*2)/4*F
  4330. EQUD (2-black%/256*4)/4*F
  4331. EQUD (3-black%/256*2)/4*F
  4332. EQUD F
  4333. .evenrow_gard DCD even_gard
  4334. .oddrow_gard DCD odd_gard
  4335. .rowinc DCD 0
  4336. STMFD SP !,{R14}
  4337.  LDR R1,[R9,#5*8]:LDR R1,[R1]
  4338. LDR R10,[R9,#4*8]
  4339. LDR R11,[R9,#3*8]
  4340. LDR R12,[R9,#2*8]
  4341. LDR R12,[R12]
  4342. LDR R8,[R9,#8]
  4343. LDR R8,[R8]
  4344. LDR R9,[R9]
  4345. LDR R9,[R9]
  4346. LDR R4,[R10],R8
  4347. TEQ R8,#0
  4348. LDRPL R6,evenrow_gard
  4349. LDRMI R6,oddrow_gard
  4350. MOV R1,R1,LSL #1
  4351. LDR R7,rowinc
  4352. ADR R14,divtable
  4353. .fsloop
  4354. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4355. ADD R5,R4,#F>>3
  4356. MOVS R5,R5,LSR #bits-2
  4357. LDRNE R0,[R14,R5,LSL #2]
  4358. SUBNE R4,R4,R0
  4359.  dither% 
  4360. [OPT Z
  4361. ADD R2,R4,R4,LSL #1
  4362. (LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  4363. STR R3,[R11,-R8]
  4364. ADD R2,R4,R4,LSL #2
  4365. $LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  4366. STR R3,[R11]
  4367. MOV R3,R4,ASR #4
  4368. STR R3,[R11,R8]!
  4369. RSB R2,R4,R4,LSL #3
  4370. LDR R4,[R10],R8
  4371. ADDS R4,R4,R2,ASR #4
  4372. [OPT Z
  4373. LDR R4,[R10],R8
  4374. [OPT Z
  4375. %CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4376. ADD R3,R4,#F>>3
  4377. MOVS R3,R3,LSR #bits-2
  4378. LDRNE R0,[R14,R3,LSL #2]
  4379. SUBNE R4,R4,R0
  4380. R R5,R5,R3,LSL #3:LDRB R5,[R6,R5]
  4381. MOV R2,R12,LSR #2
  4382. TST R12,#2
  4383.  R3,R5,#&F:LDRB R0,[R2]
  4384. EQ R0,R0,#&F0:
  4385. REQ R0,R0,R3
  4386. NE R0,R0,#&0F:
  4387. RNE R0,R0,R3,LSL #4
  4388. STRB R0,[R2],R7
  4389.     !MOV R3,R5,LSR #4:LDRB R0,[R2]
  4390. EQ R0,R0,#&F0:
  4391. REQ R0,R0,R3
  4392. NE R0,R0,#&0F:
  4393. RNE R0,R0,R3,LSL #4
  4394. STRB R0,[R2]
  4395. ADD R12,R12,R1
  4396.  dither% 
  4397. [OPT Z
  4398. ADD R2,R4,R4,LSL #1
  4399. (LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  4400. STR R3,[R11,-R8]
  4401. ADD R2,R4,R4,LSL #2
  4402. $LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  4403. STR R3,[R11]
  4404. MOV R3,R4,ASR #4
  4405. STR R3,[R11,R8]!
  4406. RSB R2,R4,R4,LSL #3
  4407. LDR R4,[R10],R8
  4408. ADD R4,R4,R2,ASR #4
  4409. [OPT Z
  4410. LDR R4,[R10],R8
  4411. [OPT Z
  4412. SUBS R9,R9,#2:BNE fsloop
  4413. LDMFD SP !,{PC}^
  4414. [OPT Z
  4415. STMFD SP !,{R14}
  4416. * LDR R1,[R9,#5*8]:LDR R1,[R1]
  4417. LDR R10,[R9,#4*8]
  4418. LDR R11,[R9,#3*8]
  4419. LDR R12,[R9,#2*8]
  4420. LDR R12,[R12]
  4421. LDR R8,[R9,#8]
  4422. LDR R8,[R8]
  4423. LDR R9,[R9]
  4424. LDR R9,[R9]
  4425. LDR R4,[R10],R8
  4426. MOV R7,#1
  4427. .fsloop
  4428. 6%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  4429.  black% 
  4430. [OPT Z
  4431. MOV R2,R12,LSR #3
  4432.  R5,R12,#7:MOV R6,#1
  4433. LDRB R0,[R2,#-(x%+7>>3)]
  4434. SUB R3,R4,#F
  4435. CMP R7,#0
  4436. ?!ADDNE R4,R4,#black%<<(bits-8)
  4437. @!ADDEQ R3,R3,#black%<<(bits-8)
  4438. TST R0,R6,LSL R5
  4439. B!ADDNE R4,R4,#black%<<(bits-8)
  4440. C!ADDEQ R3,R3,#black%<<(bits-8)
  4441. MOVS R0,R3:RSBMI R0,R3,#0
  4442. CMP R4,R0
  4443. MOVCC R3,#0
  4444. MOVCS R4,R3:MOVCS R3,#1
  4445. MOV R7,R3
  4446. [OPT Z
  4447. L'ADD R3,R4,#F>>1:MOV R3,R3,LSR #bits
  4448. SUB R4,R4,R3,LSL #bits
  4449. MOV R2,R12,LSR #3
  4450.  R5,R12,#7:MOV R6,#1
  4451. [OPT Z
  4452. S7LDRB R0,[R2]:BIC R0,R0,R6,LSL R5:
  4453. R R0,R0,R3,LSL R5
  4454. STRB R0,[R2]
  4455. ADD R12,R12,R1
  4456.  dither% 
  4457. [OPT Z
  4458. ADD R2,R4,R4,LSL #1
  4459. Z(LDR R3,[R11,-R8]:ADD R3,R3,R2,ASR #4
  4460. STR R3,[R11,-R8]
  4461. ADD R2,R4,R4,LSL #2
  4462. ]$LDR R3,[R11]:ADD R3,R3,R2,ASR #4
  4463. STR R3,[R11]
  4464. MOV R3,R4,ASR #4
  4465. STR R3,[R11,R8]!
  4466. RSB R2,R4,R4,LSL #3
  4467. LDR R4,[R10],R8
  4468. ADD R4,R4,R2,ASR #4
  4469. [OPT Z
  4470. LDR R4,[R10],R8
  4471. [OPT Z
  4472. SUBS R9,R9,#1:BNE fsloop
  4473. LDMFD SP !,{PC}^
  4474. [OPT Z
  4475. .sxloc DCD sx%
  4476.  col 
  4477.  input<=8 
  4478. [OPT Z
  4479. .mappix%
  4480. LDR R0,sxloc
  4481. LDR R1,[R9]:LDR R1,[R1]
  4482. LDR R2,[R9,#3*8]
  4483. LDR R5,[R9,#4*8]
  4484. MOV R8,#0
  4485. .mappixlp
  4486. LDRB R6,[R1],#step24
  4487.  input 
  4488.  ham 
  4489. [OPT Z
  4490. ADR R9,ltable
  4491. !MOVS R7,R6,LSR #4:
  4492.  R6,R6,#15
  4493. 2LDREQ R10,[R2,R6,LSL #2]:
  4494. Q R11,R10:
  4495. Q R12,R10
  4496. &CMP R7,#1:LDREQ R12,[R9,R6,LSL #2]
  4497. &CMP R7,#2:LDREQ R10,[R9,R6,LSL #2]
  4498. &CMP R7,#3:LDREQ R11,[R9,R6,LSL #2]
  4499. ADD R3,R10,R11
  4500. ADD R3,R3,R12
  4501. MOV R3,R3,LSR #2
  4502. STMIA R5!,{R3}
  4503. SUBS R0,R0,#1:BNE mappixlp
  4504. MOVS PC,R14
  4505. .ltable
  4506.  I%=0
  4507. [OPT Z
  4508. EQUD I%/15*F
  4509.  hpredict%=2 
  4510. [OPT Z
  4511. ADD R6,R6,R8
  4512.  R6,R6,#255
  4513. MOV R8,R6
  4514. [OPT Z
  4515. (LDR R7,[R2,R6,LSL #2]:STR R7,[R5],#4
  4516. SUBS R0,R0,#1:BNE mappixlp
  4517. MOVS PC,R14
  4518.  bigendianbits 
  4519. [OPT Z
  4520. MOV R10,R6,LSR #4
  4521. LDR R7,[R2,R10,LSL #2]
  4522.  R10,R6,#&F
  4523. [OPT Z
  4524.  R10,R6,#&F
  4525. LDR R7,[R2,R10,LSL #2]
  4526. MOV R10,R6,LSR #4
  4527. [OPT Z
  4528. ,LDR R8,[R2,R10,LSL #2]:STMIA R5!,{R7,R8}
  4529. SUBS R0,R0,#2:BHI mappixlp
  4530. MOVS PC,R14
  4531.  bigendianbits 
  4532. [OPT Z
  4533. MOV R10,R6,LSR #6
  4534. LDR R7,[R2,R10,LSL #2]
  4535.  R10,R6,#&30
  4536. LDR R8,[R2,R10,LSR #2]
  4537.  R10,R6,#&C
  4538. LDR R9,[R2,R10]
  4539.  R10,R6,#&3
  4540. [OPT Z
  4541.  R10,R6,#&3
  4542. LDR R7,[R2,R10,LSL #2]
  4543.  R10,R6,#&C
  4544. LDR R8,[R2,R10]
  4545.  R10,R6,#&30
  4546. LDR R9,[R2,R10,LSR #2]
  4547. MOV R10,R6,LSR #6
  4548. [OPT Z
  4549. 4LDR R10,[R2,R10,LSL #2]:STMIA R5!,{R7,R8,R9,R10}
  4550. SUBS R0,R0,#4:BHI mappixlp
  4551. MOVS PC,R14
  4552.  bigendianbits 
  4553. [OPT Z
  4554.  R10,R6,#&80
  4555. LDR R7,[R2,R10,LSR #5]
  4556.  R10,R6,#&40
  4557. LDR R8,[R2,R10,LSR #4]
  4558.  R10,R6,#&20
  4559. LDR R9,[R2,R10,LSR #3]
  4560.  R10,R6,#&10
  4561. 4LDR R10,[R2,R10,LSR #2]:STMIA R5!,{R7,R8,R9,R10}
  4562.  R10,R6,#&8
  4563. LDR R7,[R2,R10,LSR #1]
  4564.  R10,R6,#&4
  4565. LDR R8,[R2,R10]
  4566.  R10,R6,#&2
  4567. LDR R9,[R2,R10,LSL #1]
  4568.  R10,R6,#&1
  4569. [OPT Z
  4570.  R10,R6,#&1
  4571. LDR R7,[R2,R10,LSL #2]
  4572.  R10,R6,#&2
  4573. LDR R8,[R2,R10,LSL #1]
  4574.  R10,R6,#&4
  4575. LDR R9,[R2,R10]
  4576.  R10,R6,#&8
  4577. 4LDR R10,[R2,R10,LSR #1]:STMIA R5!,{R7,R8,R9,R10}
  4578.  R10,R6,#&10
  4579. LDR R7,[R2,R10,LSR #2]
  4580.  R10,R6,#&20
  4581. LDR R8,[R2,R10,LSR #3]
  4582.  R10,R6,#&40
  4583. LDR R9,[R2,R10,LSR #4]
  4584. MOV R10,R6,LSR #7
  4585. [OPT Z
  4586. 4LDR R10,[R2,R10,LSL #2]:STMIA R5!,{R7,R8,R9,R10}
  4587. SUBS R0,R0,#8:BHI mappixlp
  4588. MOVS PC,R14
  4589. [OPT Z
  4590. .mappix%
  4591. LDR R0,sxloc
  4592. LDR R1,[R9]:LDR R1,[R1]
  4593. LDR R2,[R9,#8]:LDR R2,[R2]
  4594. LDR R3,[R9,#4*8]
  4595. LDR R4,[R9,#3*8]
  4596. LDR R5,[R9,#2*8]
  4597. LDR R6,[R9,#5*8]
  4598. LDR R7,[R9,#6*8]
  4599. LDR R8,[R9,#7*8]
  4600. CMP R1,R2
  4601. ADDEQ R2,R2,#1
  4602. .mappixlp
  4603. .LDRB R9,[R1],#step24:LDRB R10,[R2],#step24
  4604. >LDR R9,[R6,R9,LSL #2]:LDR R10,[R7,R10,LSL #2]:
  4605. R R9,R9,R10
  4606.  R10,R9,#255:LDR R10,[R3,R10,LSL #2]
  4607. <MOV R11,R9,LSR #8:
  4608.  R11,R11,#255:LDR R11,[R4,R11,LSL #2]
  4609. .MOV R12,R9,LSR #16:LDR R12,[R5,R12,LSL #2]
  4610. 3ADD R10,R10,R11:ADD R10,R10,R12:STMIA R8!,{R10}
  4611. SUBS R0,R0,#1:BNE mappixlp
  4612. MOVS PC,R14
  4613. [OPT Z
  4614. .mappix%
  4615. LDR R0,sxloc
  4616.  LDR R1,[R9,#2*8]:LDR R1,[R1]
  4617. LDR R2,[R9,#8]:LDR R2,[R2]
  4618. LDR R3,[R9]:LDR R3,[R3]
  4619. LDR R4,[R9,#5*8]
  4620. LDR R5,[R9,#4*8]
  4621. LDR R6,[R9,#3*8]
  4622. LDR R7,[R9,#6*8]
  4623. STMFD SP !,{R14}
  4624. #$MOV r11,#0:MOV R12,#0:MOV R14,#0
  4625. .mappixlp
  4626. %CLDRB R8,[R1],#step24:LDRB R9,[R2],#step24:LDRB R10,[R3],#step24
  4627.  hpredict%=2 
  4628. [OPT Z
  4629. ADD r8,r8,r11
  4630.  r8,r8,#255
  4631. MOV r11,r8
  4632. ADD r9,r9,r12
  4633.  r9,r9,#255
  4634. MOV r12,r9
  4635. ADD r10,r10,r14
  4636.  r10,r10,#255
  4637. MOV r14,r10
  4638. [OPT Z
  4639. 5GLDR R8,[R4,R8,LSL #2]:LDR R9,[R5,R9,LSL #2]:LDR R10,[R6,R10,LSL #2]
  4640. 6-ADD R8,R8,R9:ADD R8,R8,R10:STR R8,[R7],#4
  4641. SUBS R0,R0,#1:BNE mappixlp
  4642. LDMFD SP !,{PC}^
  4643. [OPT Z
  4644. .mappix%
  4645. LDR R0,sxloc
  4646. > LDR R1,[R9,#2*8]:LDR R1,[R1]
  4647. LDR R2,[R9,#8]:LDR R2,[R2]
  4648. LDR R3,[R9]:LDR R3,[R3]
  4649. LDR R4,[R9,#5*8]
  4650. LDR R5,[R9,#4*8]
  4651. LDR R6,[R9,#3*8]
  4652. LDR R7,[R9,#6*8]
  4653. STMFD SP !,{R14}
  4654. F?MOV r11,#colourindex 
  4655.  255:ADD r11,r11,#colourindex 
  4656.  &ff00
  4657. .mappixlp
  4658. H@LDR R8,[R1],#step24:LDR R9,[R2],#step24:LDR R10,[R3],#step24
  4659.  r8,r8,r11:
  4660.  r9,r9,r11:
  4661.  r10,r10,r11
  4662. JGLDR R8,[R4,R8,LSL #2]:LDR R9,[R5,R9,LSL #2]:LDR R10,[R6,R10,LSL #2]
  4663. K-ADD R8,R8,R9:ADD R8,R8,R10:STR R8,[R7],#4
  4664. SUBS R0,R0,#1:BNE mappixlp
  4665. LDMFD SP !,{PC}^
  4666. [OPT Z
  4667. .mappix%
  4668. LDR R0,sxloc
  4669. LDR R1,[R9]:LDR R1,[R1]
  4670. LDR R4,[R9,#1*8]
  4671. LDR R7,[R9,#8*8]
  4672. .mappixlp
  4673. LDRB R8,[R1],#2
  4674. X>LDR R8,[R4,R8,LSL #2]:CMP R8,#F:MOVCS R8,#F:STR R8,[R7],#4
  4675. SUBS R0,R0,#1:BNE mappixlp
  4676. MOVS PC,R14
  4677. [OPT Z
  4678. .mappix%
  4679. LDR R0,sxloc
  4680. LDR R1,[R9]:LDR R1,[R1]
  4681. ADD R1,R1,#1
  4682. LDR R4,[R9,#1*8]
  4683. LDR R7,[R9,#8*8]
  4684. .mappixlp
  4685. LDRB R8,[R1],#2
  4686. f>LDR R8,[R4,R8,LSL #2]:CMP R8,#F:MOVCS R8,#F:STR R8,[R7],#4
  4687. SUBS R0,R0,#1:BNE mappixlp
  4688. MOVS PC,R14
  4689. [OPT Z
  4690. .mappix%
  4691. LDR R0,sxloc
  4692. LDR R1,[R9]:LDR R1,[R1]
  4693. ADD R1,R1,#1
  4694. LDR R4,[R9,#1*8]
  4695. LDR R7,[R9,#8*8]
  4696. .mappixlp
  4697. LDRB R8,[R1],#2
  4698.  R8,R8,#ymax%
  4699. u>LDR R8,[R4,R8,LSL #2]:CMP R8,#F:MOVCS R8,#F:STR R8,[R7],#4
  4700. SUBS R0,R0,#1:BNE mappixlp
  4701. MOVS PC,R14
  4702.  xmul%=2 
  4703.  xdiv%=1 
  4704. [OPT Z
  4705. .xsample%
  4706. LDR R0,[R9]:LDR R0,[R0]
  4707. LDR R1,[R9,#8]
  4708. LDR R2,[R9,#2*8]
  4709. SUBS R0,R0,#2
  4710. BEQ xdonediv
  4711. BMI xdonediv
  4712. .xsamplelp
  4713. LDMIA R1,{R5,R6}
  4714. ADD R6,R6,R5
  4715. MOV R6,R6,LSR #1
  4716. STMIA R2!,{R5,R6}
  4717. ADD R1,R1,#4
  4718. SUBS R0,R0,#2:BGT xsamplelp
  4719. .xdonediv
  4720. LDMIA R1,{R5}
  4721. MOV R6,R5
  4722. STMIA R2!,{R5,R6}
  4723. MOVS PC,R14
  4724. [OPT Z
  4725. .xsample%
  4726. LDR R0,[R9]:LDR R0,[R0]
  4727. LDR R1,[R9,#8]
  4728. LDR R2,[R9,#2*8]
  4729.  LDR R3,[R9,#3*8]:LDR R3,[R3]
  4730.  LDR R4,[R9,#4*8]:LDR R4,[R4]
  4731. MOV R11,R4
  4732. .xsamplelp
  4733. LDMIA R1,{R5}
  4734. ,SUBS R11,R11,#1:
  4735. Q R11,R4:ADDEQ R1,R1,#4
  4736. SUBS R12,R3,#1
  4737. BEQ xdonediv
  4738. .xdivlp
  4739. CMP R12,R11
  4740. BCC xdivlp2
  4741. #LDMIA R1!,{R8}:MLA R5,R8,R11,R5
  4742. SUBS R12,R12,R11:MOV R11,R4
  4743. BNE xdivlp
  4744. B xdonediv
  4745. .xdivlp2
  4746. LDMIA R1,{R8}
  4747. ,SUBS R11,R11,#1:
  4748. Q R11,R4:ADDEQ R1,R1,#4
  4749. ADD R5,R5,R8
  4750. SUBS R12,R12,#1:BNE xdivlp
  4751. .xdonediv
  4752. STMIA R2!,{R5}
  4753. SUBS R0,R0,#1:BPL xsamplelp
  4754. MOVS PC,R14
  4755.  input<=8 
  4756. [OPT Z
  4757. .mappix%
  4758. LDR R0,sxloc
  4759. LDR R1,[R9]:LDR R1,[R1]
  4760. LDR R2,[R9,#3*8]
  4761. LDR R3,[R9,#2*8]
  4762. LDR R4,[R9,#8]
  4763. LDR R5,[R9,#4*8]
  4764. MOV R10,#0
  4765. .mappixlp
  4766. LDRB R6,[R1],#step24
  4767.  input 
  4768.  ham 
  4769. [OPT Z
  4770. ADR R9,ltable
  4771. !MOVS R7,R6,LSR #4:
  4772.  R6,R6,#15
  4773. NLDREQ R10,[R2,R6,LSL #2]:LDREQ R11,[R3,R6,LSL #2]:LDREQ R12,[R4,R6,LSL #2]
  4774. &CMP R7,#1:LDREQ R12,[R9,R6,LSL #2]
  4775. &CMP R7,#2:LDREQ R10,[R9,R6,LSL #2]
  4776. &CMP R7,#3:LDREQ R11,[R9,R6,LSL #2]
  4777. STMIA R5!,{R10,R11,R12}
  4778. SUBS R0,R0,#1:BNE mappixlp
  4779. MOVS PC,R14
  4780. .ltable
  4781.  I%=0
  4782. [OPT Z
  4783. EQUD I%/15*F
  4784.  hpredict%=2 
  4785. [OPT Z
  4786. ADD R6,R6,R10
  4787.  R6,R6,#255
  4788. MOV R10,R6
  4789. [OPT Z
  4790. ELDR R7,[R2,R6,LSL #2]:LDR R8,[R3,R6,LSL #2]:LDR R9,[R4,R6,LSL #2]
  4791. STMIA R5!,{R7,R8,R9}
  4792. SUBS R0,R0,#1:BNE mappixlp
  4793. MOVS PC,R14
  4794.  bigendianbits 
  4795. [OPT Z
  4796. MOV R10,R6,LSR #4
  4797. HLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
  4798. STMIA R5!,{R7,R8,R9}
  4799.  R10,R6,#&F
  4800. [OPT Z
  4801.  R10,R6,#&F
  4802. HLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
  4803. STMIA R5!,{R7,R8,R9}
  4804. MOV R10,R6,LSR #4
  4805. [OPT Z
  4806. HLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
  4807. STMIA R5!,{R7,R8,R9}
  4808. SUBS R0,R0,#2:BHI mappixlp
  4809. MOVS PC,R14
  4810.  bigendianbits 
  4811. [OPT Z
  4812. MOV R10,R6,LSR #6
  4813. HLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
  4814. STMIA R5!,{R7,R8,R9}
  4815.  R10,R6,#&30
  4816. HLDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2]
  4817. STMIA R5!,{R7,R8,R9}
  4818.  R10,R6,#&C
  4819. 3LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10]
  4820. STMIA R5!,{R7,R8,R9}
  4821.  R10,R6,#&3
  4822. [OPT Z
  4823.  R10,R6,#&3
  4824.     HLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
  4825. STMIA R5!,{R7,R8,R9}
  4826.  R10,R6,#&C
  4827. 3LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10]
  4828. STMIA R5!,{R7,R8,R9}
  4829.  R10,R6,#&30
  4830. HLDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2]
  4831. STMIA R5!,{R7,R8,R9}
  4832. MOV R10,R6,LSR #6
  4833. [OPT Z
  4834. HLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
  4835. STMIA R5!,{R7,R8,R9}
  4836. SUBS R0,R0,#4:BHI mappixlp
  4837. MOVS PC,R14
  4838.  bigendianbits 
  4839. [OPT Z
  4840.  R10,R6,#&80
  4841. HLDR R7,[R2,R10,LSR #5]:LDR R8,[R3,R10,LSR #5]:LDR R9,[R4,R10,LSR #5]
  4842. STMIA R5!,{R7,R8,R9}
  4843.  R10,R6,#&40
  4844. !HLDR R7,[R2,R10,LSR #4]:LDR R8,[R3,R10,LSR #4]:LDR R9,[R4,R10,LSR #4]
  4845. STMIA R5!,{R7,R8,R9}
  4846.  R10,R6,#&20
  4847. $HLDR R7,[R2,R10,LSR #3]:LDR R8,[R3,R10,LSR #3]:LDR R9,[R4,R10,LSR #3]
  4848. STMIA R5!,{R7,R8,R9}
  4849.  R10,R6,#&10
  4850. 'HLDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2]
  4851. STMIA R5!,{R7,R8,R9}
  4852.  R10,R6,#&8
  4853. *HLDR R7,[R2,R10,LSR #1]:LDR R8,[R3,R10,LSR #1]:LDR R9,[R4,R10,LSR #1]
  4854. STMIA R5!,{R7,R8,R9}
  4855.  R10,R6,#&4
  4856. -3LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10]
  4857. STMIA R5!,{R7,R8,R9}
  4858.  R10,R6,#&2
  4859. 0HLDR R7,[R2,R10,LSL #1]:LDR R8,[R3,R10,LSL #1]:LDR R9,[R4,R10,LSL #1]
  4860. STMIA R5!,{R7,R8,R9}
  4861.  R10,R6,#&1
  4862. [OPT Z
  4863.  R10,R6,#&1
  4864. 7HLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
  4865. STMIA R5!,{R7,R8,R9}
  4866.  R10,R6,#&2
  4867. :HLDR R7,[R2,R10,LSL #1]:LDR R8,[R3,R10,LSL #1]:LDR R9,[R4,R10,LSL #1]
  4868. STMIA R5!,{R7,R8,R9}
  4869.  R10,R6,#&4
  4870. =3LDR R7,[R2,R10]:LDR R8,[R3,R10]:LDR R9,[R4,R10]
  4871. STMIA R5!,{R7,R8,R9}
  4872.  R10,R6,#&8
  4873. @HLDR R7,[R2,R10,LSR #1]:LDR R8,[R3,R10,LSR #1]:LDR R9,[R4,R10,LSR #1]
  4874. STMIA R5!,{R7,R8,R9}
  4875.  R10,R6,#&10
  4876. CHLDR R7,[R2,R10,LSR #2]:LDR R8,[R3,R10,LSR #2]:LDR R9,[R4,R10,LSR #2]
  4877. STMIA R5!,{R7,R8,R9}
  4878.  R10,R6,#&20
  4879. FHLDR R7,[R2,R10,LSR #3]:LDR R8,[R3,R10,LSR #3]:LDR R9,[R4,R10,LSR #3]
  4880. STMIA R5!,{R7,R8,R9}
  4881.  R10,R6,#&40
  4882. IHLDR R7,[R2,R10,LSR #4]:LDR R8,[R3,R10,LSR #4]:LDR R9,[R4,R10,LSR #4]
  4883. STMIA R5!,{R7,R8,R9}
  4884. MOV R10,R6,LSR #7
  4885. [OPT Z
  4886. OHLDR R7,[R2,R10,LSL #2]:LDR R8,[R3,R10,LSL #2]:LDR R9,[R4,R10,LSL #2]
  4887. STMIA R5!,{R7,R8,R9}
  4888. SUBS R0,R0,#8:BHI mappixlp
  4889. MOVS PC,R14
  4890. [OPT Z
  4891. .mappix%
  4892. LDR R0,sxloc
  4893. LDR R1,[R9]:LDR R1,[R1]
  4894. LDR R2,[R9,#8]:LDR R2,[R2]
  4895. LDR R3,[R9,#4*8]
  4896. LDR R4,[R9,#3*8]
  4897. LDR R5,[R9,#2*8]
  4898. LDR R6,[R9,#5*8]
  4899. LDR R7,[R9,#6*8]
  4900. LDR R8,[R9,#7*8]
  4901. CMP R1,R2
  4902. ADDEQ R2,R2,#1
  4903. .mappixlp
  4904. c.LDRB R9,[R1],#step24:LDRB R10,[R2],#step24
  4905. d>LDR R9,[R6,R9,LSL #2]:LDR R10,[R7,R10,LSL #2]:
  4906. R R9,R9,R10
  4907.  R10,R9,#255:LDR R10,[R3,R10,LSL #2]
  4908. f<MOV R11,R9,LSR #8:
  4909.  R11,R11,#255:LDR R11,[R4,R11,LSL #2]
  4910. g.MOV R12,R9,LSR #16:LDR R12,[R5,R12,LSL #2]
  4911. STMIA R8!,{R10,R11,R12}
  4912. SUBS R0,R0,#1:BNE mappixlp
  4913. MOVS PC,R14
  4914. [OPT Z
  4915. .mappix%
  4916. LDR R0,sxloc
  4917. p LDR R1,[R9,#2*8]:LDR R1,[R1]
  4918. LDR R2,[R9,#8]:LDR R2,[R2]
  4919. LDR R3,[R9]:LDR R3,[R3]
  4920. LDR R4,[R9,#5*8]
  4921. LDR R5,[R9,#4*8]
  4922. LDR R6,[R9,#3*8]
  4923. LDR R7,[R9,#6*8]
  4924. STMFD SP !,{R14}
  4925. x$MOV r11,#0:MOV R12,#0:MOV R14,#0
  4926. .mappixlp
  4927. zCLDRB R8,[R1],#step24:LDRB R9,[R2],#step24:LDRB R10,[R3],#step24
  4928.  hpredict%=2 
  4929. [OPT Z
  4930. ADD r8,r8,r11
  4931.  r8,r8,#255
  4932. MOV r11,r8
  4933. ADD r9,r9,r12
  4934.  r9,r9,#255
  4935. MOV r12,r9
  4936. ADD r10,r10,r14
  4937.  r10,r10,#255
  4938. MOV r14,r10
  4939. [OPT Z
  4940. GLDR R8,[R4,R8,LSL #2]:LDR R9,[R5,R9,LSL #2]:LDR R10,[R6,R10,LSL #2]
  4941. STMIA R7!,{R8,R9,R10}
  4942. SUBS R0,R0,#1:BNE mappixlp
  4943. LDMFD SP !,{PC}^
  4944. [OPT Z
  4945. .mappix%
  4946. LDR R0,sxloc
  4947.  LDR R1,[R9,#2*8]:LDR R1,[R1]
  4948. LDR R2,[R9,#8]:LDR R2,[R2]
  4949. LDR R3,[R9]:LDR R3,[R3]
  4950. LDR R4,[R9,#5*8]
  4951. LDR R5,[R9,#4*8]
  4952. LDR R6,[R9,#3*8]
  4953. LDR R7,[R9,#6*8]
  4954. STMFD SP !,{R14}
  4955. ?MOV r11,#colourindex 
  4956.  255:ADD r11,r11,#colourindex 
  4957.  &ff00
  4958. .mappixlp
  4959. @LDR R8,[R1],#step24:LDR R9,[R2],#step24:LDR R10,[R3],#step24
  4960.  r8,r8,r11:
  4961.  r9,r9,r11:
  4962.  r10,r10,r11
  4963. GLDR R8,[R4,R8,LSL #2]:LDR R9,[R5,R9,LSL #2]:LDR R10,[R6,R10,LSL #2]
  4964. STMIA R7!,{R8,R9,R10}
  4965. SUBS R0,R0,#1:BNE mappixlp
  4966. LDMFD SP !,{PC}^
  4967. [OPT Z
  4968. .mappix%
  4969. LDR R0,sxloc
  4970. LDR R1,[R9]:LDR R1,[R1]
  4971. LDR R2,[R9,#1*8]
  4972. LDR R3,[R9,#2*8]
  4973. LDR R5,[R9,#4*8]
  4974. LDR R6,[R9,#5*8]
  4975. LDR R7,[R9,#6*8]
  4976. LDR R9,[R9,#8*8]
  4977. STMFD SP !,{R14}
  4978. .mappixlp
  4979. LDMIA R1!,{R4,R10}
  4980.  R8,R4,#&C000
  4981. MOV R8,R8,LSR #8
  4982.  R14,R4,#&C0000000
  4983. R R8,R8,R14,LSR #16+8+2
  4984.  R14,R10,#&C000
  4985. R R8,R8,R14,LSR #8+4
  4986. R R8,R8,R10,LSR #16+8+6
  4987.  R11,R4,#&3000
  4988. MOV R11,R11,LSR #6
  4989.  R14,R4,#&30000000
  4990. R R11,R11,R14,LSR #16+6+2
  4991.  R14,R10,#&3000
  4992. R R11,R11,R14,LSR #6+4
  4993.  R14,R10,#&30000000
  4994. R R11,R11,R14,LSR #16+6+6
  4995.  R12,R4,#&FF
  4996. LDR R12,[R2,R12,LSL #2]
  4997. ,LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12
  4998. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  4999. *LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12
  5000. ,LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12
  5001. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5002.  R12,R4,#&FF
  5003. LDR R12,[R2,R12,LSL #2]
  5004. +LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14
  5005. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5006. MOV R4,R4,LSR #16
  5007.  R12,R4,#&FF
  5008. LDR R12,[R2,R12,LSL #2]
  5009. ,LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12
  5010. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5011. *LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12
  5012. ,LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12
  5013. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5014.  R12,R4,#&FF
  5015. LDR R12,[R2,R12,LSL #2]
  5016. +LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14
  5017. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5018.  R12,R10,#&FF
  5019. LDR R12,[R2,R12,LSL #2]
  5020. ,LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12
  5021. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5022. *LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12
  5023. ,LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12
  5024. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5025.  R12,R10,#&FF
  5026. LDR R12,[R2,R12,LSL #2]
  5027. +LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14
  5028. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5029. MOV R10,R10,LSR #16
  5030.  R12,R10,#&FF
  5031. LDR R12,[R2,R12,LSL #2]
  5032. ,LDR R14,[R7,R11,LSL #2]:ADDS R14,R14,R12
  5033. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5034. *LDR R14,[R6,R8,LSL #2]:ADD R14,R14,R12
  5035. ,LDR R12,[R5,R11,LSL #2]:ADDS R14,R14,R12
  5036. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5037.  R12,R10,#&FF
  5038. LDR R12,[R2,R12,LSL #2]
  5039. +LDR R14,[R3,R8,LSL #2]:ADDS R14,R12,R14
  5040. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5041. SUBS R0,R0,#4:BNE mappixlp
  5042. LDMFD SP !,{PC}^
  5043. [OPT Z
  5044. .mappix%
  5045. LDR R0,sxloc
  5046. LDR R1,[R9]:LDR R1,[R1]
  5047. LDR R2,[R9,#1*8]
  5048. LDR R3,[R9,#2*8]
  5049. LDR R4,[R9,#3*8]
  5050. LDR R5,[R9,#4*8]
  5051. LDR R6,[R9,#5*8]
  5052. LDR R7,[R9,#6*8]
  5053. LDR R8,[R9,#7*8]
  5054. LDR R9,[R9,#8*8]
  5055. STMFD SP !,{R14}
  5056. .mappixlp
  5057. LDR R10,[R1],#4
  5058.  R11,R10,#&FF00
  5059. LDR R11,[R2,R11,LSR #6]
  5060.  R12,R10,#&FF:LDR R12,[R7,R12,LSL #2]:ADD R14,R12,R11
  5061.  R12,R10,#&FF0000:LDR R12,[R8,R12,LSR #14]:ADDS R14,R14,R12
  5062. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5063.  R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11
  5064.  R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12
  5065.     8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5066.  R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADD R14,R12,R11
  5067.  R12,R10,#&FF0000:LDR R12,[R4,R12,LSR #14]:ADDS R14,R14,R12
  5068. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5069.  R11,R10,#&FF000000
  5070. LDR R11,[R2,R11,LSR #22]
  5071.  R12,R10,#&FF:LDR R12,[R7,R12,LSL #2]:ADD R14,R12,R11
  5072.  R12,R10,#&FF0000:LDR R12,[R8,R12,LSR #14]:ADDS R14,R14,R12
  5073. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5074.  R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11
  5075.  R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12
  5076. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5077.  R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADD R14,R12,R11
  5078.  R12,R10,#&FF0000:LDR R12,[R4,R12,LSR #14]:ADDS R14,R14,R12
  5079. 8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5080. SUBS R0,R0,#2:BNE mappixlp
  5081. LDMFD SP !,{PC}^
  5082. [OPT Z
  5083. .mappix%
  5084. LDR R0,sxloc
  5085. LDR R1,[R9]:LDR R1,[R1]
  5086. LDR R2,[R9,#1*8]
  5087. LDR R3,[R9,#2*8]
  5088. LDR R5,[R9,#4*8]
  5089. LDR R6,[R9,#5*8]
  5090. LDR R7,[R9,#6*8]
  5091. LDR R9,[R9,#8*8]
  5092. STMFD SP !,{R14}
  5093. .mappixlp
  5094. LDR R10,[R1],#4
  5095.  R11,R10,#&FF00
  5096. LDR R11,[R2,R11,LSR #6]
  5097.  R12,R10,#&FF0000:LDR R12,[R7,R12,LSR #14]:ADDS R14,R12,R11
  5098. ,8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5099.  R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11
  5100.  R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12
  5101. /8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5102.  R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADDS R14,R12,R11
  5103. 18MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5104.  R11,R10,#&FF000000
  5105. LDR R11,[R2,R11,LSR #22]
  5106.  R12,R10,#&FF0000:LDR R12,[R7,R12,LSR #14]:ADDS R14,R12,R11
  5107. 58MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5108.  R12,R10,#&FF:LDR R12,[R5,R12,LSL #2]:ADD R14,R12,R11
  5109.  R12,R10,#&FF0000:LDR R12,[R6,R12,LSR #14]:ADDS R14,R14,R12
  5110. 88MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5111.  R12,R10,#&FF:LDR R12,[R3,R12,LSL #2]:ADDS R14,R12,R11
  5112. :8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5113. SUBS R0,R0,#2:BNE mappixlp
  5114. LDMFD SP !,{PC}^
  5115. [OPT Z
  5116. .mappix%
  5117. LDR R0,sxloc
  5118. LDR R1,[R9]:LDR R1,[R1]
  5119. LDR R2,[R9,#1*8]
  5120. LDR R3,[R9,#2*8]
  5121. LDR R5,[R9,#4*8]
  5122. LDR R6,[R9,#5*8]
  5123. LDR R7,[R9,#6*8]
  5124. LDR R9,[R9,#8*8]
  5125. STMFD SP !,{R14}
  5126. .mappixlp
  5127. LDR R10,[R1],#2
  5128.  R11,R10,#ymax%
  5129. LDR R11,[R2,R11,LSL #2]
  5130.  R8,R10,#((1<<vbits%)-1)<<(ybits%+ubits%)
  5131.  R10,R10,#((1<<ubits%)-1)<<ybits%
  5132. P9LDR R12,[R7,R8,LSR #ybits%+ubits%-2]:ADDS R14,R12,R11
  5133. Q8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5134. R8LDR R12,[R5,R8,LSR #ybits%+ubits%-2]:ADD R14,R12,R11
  5135. S3LDR R12,[R6,R10,LSR #ybits%-2]:ADDS R14,R14,R12
  5136. T8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5137. U3LDR R12,[R3,R10,LSR #ybits%-2]:ADDS R14,R12,R11
  5138. V8MOVMI R14,#0:CMP R14,#F:MOVCS R14,#F:STR R14,[R9],#4
  5139. SUBS R0,R0,#1:BNE mappixlp
  5140. LDMFD SP !,{PC}^
  5141.  xmul%=2 
  5142.  xdiv%=1 
  5143. [OPT Z
  5144. .xsample%
  5145. LDR R0,[R9]:LDR R0,[R0]
  5146. LDR R1,[R9,#8]
  5147. LDR R2,[R9,#2*8]
  5148. SUBS R0,R0,#2
  5149. BEQ xdonediv
  5150. BMI xdonediv
  5151. .xsamplelp
  5152. e!LDMIA R1,{R5,R6,R7,R8,R9,R10}
  5153. ADD R8,R8,R5
  5154. MOV R8,R8,LSR #1
  5155. ADD R9,R9,R6
  5156. MOV R9,R9,LSR #1
  5157. ADD R10,R10,R7
  5158. MOV R10,R10,LSR #1
  5159. l"STMIA R2!,{R5,R6,R7,R8,R9,R10}
  5160. ADD R1,R1,#12
  5161. SUBS R0,R0,#2:BGT xsamplelp
  5162. .xdonediv
  5163. LDMIA R1,{R5,R6,R7}
  5164. MOV R8,R5
  5165. MOV R9,R6
  5166. MOV R10,R7
  5167. t"STMIA R2!,{R5,R6,R7,R8,R9,R10}
  5168. MOVS PC,R14
  5169. [OPT Z
  5170. .xsample%
  5171. LDR R0,[R9]:LDR R0,[R0]
  5172. LDR R1,[R9,#8]
  5173. LDR R2,[R9,#2*8]
  5174. } LDR R3,[R9,#3*8]:LDR R3,[R3]
  5175. ~ LDR R4,[R9,#4*8]:LDR R4,[R4]
  5176. MOV R11,R4
  5177. .xsamplelp
  5178. LDMIA R1,{R5,R6,R7}
  5179. -SUBS R11,R11,#1:
  5180. Q R11,R4:ADDEQ R1,R1,#12
  5181. SUBS R12,R3,#1
  5182. BEQ xdonediv
  5183. .xdivlp
  5184. CMP R12,R11
  5185. BCC xdivlp2
  5186. MLDMIA R1!,{R8,R9,R10}:MLA R5,R8,R11,R5:MLA R6,R9,R11,R6:MLA R7,R10,R11,R7
  5187. SUBS R12,R12,R11:MOV R11,R4
  5188. BNE xdivlp
  5189. B xdonediv
  5190. .xdivlp2
  5191. LDMIA R1,{R8,R9,R10}
  5192. -SUBS R11,R11,#1:
  5193. Q R11,R4:ADDEQ R1,R1,#12
  5194. +ADD R5,R5,R8:ADD R6,R6,R9:ADD R7,R7,R10
  5195. SUBS R12,R12,#1:BNE xdivlp
  5196. .xdonediv
  5197. STMIA R2!,{R5,R6,R7}
  5198. SUBS R0,R0,#1:BPL xsamplelp
  5199. MOVS PC,R14
  5200.  compression=5 
  5201. [OPT Z
  5202. .firstcode DCD 0
  5203. .oldcode DCD 0
  5204. .codesize DCD setcodes%+1
  5205. .stack DCD stk%
  5206. .sp DCD stk%
  5207. .maxcode DCD clearcode%+2
  5208. !.maxcodesize DCD 2*clearcode%
  5209. .LZWdecode%
  5210. @LDR R2,firstcode:LDR R3,oldcode:LDR R4,stack:LDR R5,codesize
  5211. /LDR R6,sp:LDR R7,maxcode:LDR R8,maxcodesize
  5212. LDR R10,[R9]:LDR R10,[R10]
  5213. !LDR R11,[R9,#8]:LDR R11,[R11]
  5214. LDR R12,[R9,#24]
  5215. STMFD SP !,{R14}
  5216. .lzwloop
  5217. CMP R6,R4
  5218. BHI lzwunstack
  5219. .lzwengine
  5220. BL getcode
  5221. CMP R0,#clearcode%
  5222. BEQ lzwclear
  5223. MOV R1,R0
  5224. CMP R0,R7
  5225. STRCSB R2,[R6],#1
  5226. MOVCS R0,R3
  5227. CMP R0,#clearcode%
  5228. BCC lzwdonepush
  5229. .lzwpushtable
  5230. LDR R14,[R12,R0,LSL #2]
  5231. STRB R14,[R6],#1
  5232. MOV R0,R14,LSR #16
  5233. CMP R0,#clearcode%
  5234. BCS lzwpushtable
  5235. .lzwdonepush
  5236. LDR R2,[R12,R0,LSL #2]
  5237. BIC R2,R2,#&FF0000
  5238. BIC R2,R2,#&FF000000
  5239. STRB R2,[R6],#1
  5240. CMP R7,#4096
  5241. BCS lzwnocode
  5242. R R0,R2,R3,LSL #16
  5243. STR R0,[R12,R7,LSL #2]
  5244. ADD R7,R7,#1
  5245. CMP R7,R8
  5246. BCC lzwnocode
  5247. CMP R8,#4096
  5248. ADDCC R5,R5,#1
  5249. MOVCC R8,R8,LSL #1
  5250.  flag=1500 
  5251. [OPT Z
  5252. RCC R8,R8,#1
  5253. [OPT Z
  5254. .lzwnocode
  5255. MOV R3,R1
  5256. CMP R6,R4
  5257. BLS lzwengine
  5258. .lzwunstack
  5259. LDRB R0,[R6,#-1]!
  5260. .lzwloopend
  5261. STRB R0,[R11],#1
  5262. SUBS R10,R10,#1
  5263. BNE lzwloop
  5264. 3STR R2,firstcode:STR R3,oldcode:STR R5,codesize
  5265. /STR R6,sp:STR R7,maxcode:STR R8,maxcodesize
  5266. LDMFD SP !,{PC}^
  5267. .lzwclear
  5268. MOV R0,#0
  5269. MOV R3,R12
  5270. .lzwdefaulttable
  5271. STR R0,[R3],#4
  5272. #ADD R0,R0,#1:CMP R0,#clearcode%
  5273. BCC lzwdefaulttable
  5274. MOV R5,#setcodes%+1
  5275. MOV R7,#clearcode%
  5276. MOV R8,R7,LSL #1
  5277.  flag=1500 
  5278. [OPT Z
  5279. SUB R8,R8,#1
  5280. [OPT Z
  5281. ADD R7,R7,#2
  5282. BL getcode
  5283. MOV R2,R0
  5284. MOV R3,R0
  5285. MOV R6,R4
  5286. B lzwloopend
  5287. .curbit DCD 0
  5288. .lastbit DCD 0
  5289. .buf DCD buf%
  5290. .getcode
  5291. STMFD SP !,{R6,R7,R8}
  5292. ADR R6,curbit
  5293. LDMIA R6,{R6,R7,R8}
  5294. ADD R1,R5,R6
  5295. CMP R1,R7
  5296. BCS needmoredata
  5297. .simplecode
  5298. ADD R7,R8,R6,LSR #3
  5299. BIC R7,R7,#3
  5300. LDMIA R7,{R0,R7}
  5301.  flag=1500 
  5302. [OPT Z
  5303.  R1,R0,R0,ROR #16
  5304. BIC R1,R1,#&FF0000
  5305. MOV R0,R0,ROR #8
  5306.  R0,R0,R1,LSR #8
  5307.  R1,R7,R7,ROR #16
  5308. BIC R1,R1,#&FF0000
  5309. MOV R7,R7,ROR #8
  5310.  R7,R7,R1,LSR #8
  5311. S R1,R6,#31:MOVNE R0,R0,LSL R1:RSBNE R1,R1,#32:
  5312. RNE R0,R0,R7,LSR R1
  5313. RSB R1,R5,#32
  5314. MOV R0,R0,LSR R1
  5315. [OPT Z
  5316. S R1,R6,#31:MOVNE R0,R0,LSR R1:RSBNE R1,R1,#32:
  5317. RNE R0,R0,R7,LSL R1
  5318. !MVN R1,#0:BIC R0,R0,R1,LSL R5
  5319. [OPT Z
  5320. ADD R6,R6,R5
  5321. STR R6,curbit
  5322. LDMFD SP !,{R6,R7,R8}
  5323. MOV PC,R14
  5324. .needmoredata
  5325. STMFD SP !,{R2,R3,R4,R14}
  5326. MOV R3,R7,LSR #3
  5327. SUB R0,R3,#2
  5328. LDRB R0,[R8,R0]
  5329. STRB R0,[R8]
  5330. SUB R0,R3,#1
  5331. LDRB R0,[R8,R0]
  5332. STRB R0,[R8,#1]
  5333. LDR R1,[R9,#16]
  5334. LDR R1,[R1]
  5335.  flag=1500 
  5336. [OPT Z
  5337. MOV R0,#256
  5338. MOV R3,#256
  5339. [OPT Z
  5340. BL bytefromcache%
  5341. MOVS R3,R0
  5342. BEQ simplecode1
  5343. [OPT Z
  5344. SUB R6,R6,R7
  5345. ADD R6,R6,#16
  5346. ADD R0,R0,#2
  5347. MOV R7,R0,LSL #3
  5348. STR R7,lastbit
  5349. ADD R2,R8,#2
  5350. BL multibytefromcache%
  5351. .simplecode1
  5352. LDMFD SP !,{R2,R3,R4,R14}
  5353. B simplecode
  5354.  range% 
  5355. [OPT Z
  5356. .maxmin%
  5357. LDR R0,[R9]:LDR R0,[R0]
  5358. LDR R1,[R9,#8]
  5359. LDR R2,min
  5360. LDR R3,max
  5361. .maxminlp
  5362. LDR R4,[R1],#4
  5363. CMP R4,R3:MOVCS R3,R4
  5364. CMP R4,R2:MOVCC R2,R4
  5365. SUBS R0,R0,#1:BNE maxminlp
  5366. STR R2,min
  5367. STR R3,max
  5368. MOVS PC,R14
  5369. .min DCD F
  5370. .max DCD 0
  5371.  sharpen% 
  5372. V"sharp=(col+1)*4:
  5373.  sharpen%>0 
  5374.  sharpen%<>8 sharpmul%=F/(sharpen%-8)
  5375. sharpmul%=F/(8-sharpen%)
  5376. [OPT Z
  5377. .sharp%
  5378. LDR R0,[R9]:LDR R0,[R0]
  5379. LDR R1,[R9,#8]
  5380. LDR R2,[R9,#16]
  5381. LDR R3,[R9,#24]
  5382. LDR R4,[R9,#32]
  5383.  sharpen% 
  5384.  8,9,12,16,24
  5385. [OPT Z
  5386. MOV R8,#sharpmul% 
  5387. R R8,R8,#sharpmul% 
  5388.  &FF00
  5389. j#MOV R9,#(sharpmul% >> 16) 
  5390. R R9,R9,#(sharpmul% >> 16) 
  5391.  &FF00
  5392. [OPT Z
  5393. .sharplp
  5394. LDR R5,[R1,#-sharp]
  5395. q#LDR R6,[R1,#sharp]:ADD R5,R5,R6
  5396. LDR R6,[R1],#4:ADD R5,R5,R6
  5397. s$LDR R6,[R3,#-sharp]:ADD R5,R5,R6
  5398. t#LDR R6,[R3,#sharp]:ADD R5,R5,R6
  5399. LDR R6,[R3],#4:ADD R5,R5,R6
  5400. v$LDR R6,[R2,#-sharp]:ADD R5,R5,R6
  5401. w#LDR R6,[R2,#sharp]:ADD R5,R5,R6
  5402. LDR R6,[R2],#4
  5403. MOV R6,R6,LSR #1
  5404. MOV R7,#
  5405.  sharpen%
  5406. MUL R7,R6,R7
  5407.  sharpen%>0 
  5408. [OPT Z
  5409. SUBS R5,R7,R5,LSR #1
  5410. MOVCC R5,#0
  5411. [OPT Z
  5412. ADD R5,R7,R5,LSR #1
  5413.  sharpen% 
  5414. [OPT Z
  5415. MOV R6,R5,LSL #1
  5416. [OPT Z
  5417. MOV R6,R5
  5418. [OPT Z
  5419. MOV R6,R5,LSR #1
  5420. [OPT Z
  5421. MOV R6,R5,LSR #2
  5422.  -8,24
  5423. [OPT Z
  5424. MOV R6,R5,LSR #3
  5425. [OPT Z
  5426. MOV R6,R5,LSR #16
  5427.  R5,R5,R6,LSL #16
  5428. MUL R7,R8,R5
  5429. MUL R5,R9,R5
  5430. MUL R10,R6,R8
  5431. MUL R6,R9,R6
  5432. ADDS R10,R5,R10
  5433. ADDCS R6,R6,#&10000
  5434. ADDS R7,R7,R10,LSL #16
  5435. ADC R6,R6,R10,LSR #16
  5436. MOV R6,R6,LSL #(32-27)
  5437. RS R6,R6,R7,LSR #27
  5438. ADDCS R6,R6,#1
  5439.  sharpen%>0 
  5440. [OPT Z
  5441. CMP R6,#F:MOVCS R6,#F
  5442. [OPT Z
  5443. STR R6,[R4],#4
  5444. SUBS R0,R0,#1
  5445. BNE sharplp
  5446. MOVS PC,R14
  5447.  hist%
  5448. equal% 
  5449. [OPT Z
  5450. .histo%
  5451. LDR R0,[R9]:LDR R0,[R0]
  5452. LDR R1,[R9,#8]
  5453. LDR R2,[R9,#16]
  5454. .histlp
  5455. (LDR R3,[R2],#4:CMP R3,#F:MOVCS R3,#F
  5456. MOV R3,R3,LSR #bits-8
  5457.  col=2 
  5458. [OPT Z
  5459. ADD R3,R3,R3,LSL #1
  5460. <LDR R4,[R1,R3,LSL #2]:ADD R4,R4,#1:STR R4,[R1,R3,LSL #2]
  5461. (LDR R3,[R2],#4:CMP R3,#F:MOVCS R3,#F
  5462. MOV R3,R3,LSR #bits-8
  5463. $ADD R3,R3,R3,LSL #1:ADD R3,R3,#1
  5464. <LDR R4,[R1,R3,LSL #2]:ADD R4,R4,#1:STR R4,[R1,R3,LSL #2]
  5465. (LDR R3,[R2],#4:CMP R3,#F:MOVCS R3,#F
  5466. MOV R3,R3,LSR #bits-8
  5467. $ADD R3,R3,R3,LSL #1:ADD R3,R3,#2
  5468. [OPT Z
  5469. <LDR R4,[R1,R3,LSL #2]:ADD R4,R4,#1:STR R4,[R1,R3,LSL #2]
  5470. SUBS R0,R0,#1
  5471. BNE histlp
  5472. MOVS PC,R14
  5473.  equal% 
  5474. [OPT Z
  5475. .histequal%
  5476. LDR R0,[R9]:LDR R0,[R0]
  5477. LDR R1,[R9,#8]
  5478. LDR R2,[R9,#16]
  5479. .equallp
  5480. %LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F
  5481. MOV R3,R3,LSR #bits-8
  5482.  col=2 
  5483. [OPT Z
  5484. %LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F
  5485. MOV R3,R3,LSR #bits-8
  5486. ADD R3,R3,R3,LSL #1
  5487. (LDR R4,[R1,R3,LSL #2]:STR R4,[R2],#4
  5488. %LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F
  5489. MOV R3,R3,LSR #bits-8
  5490. $ADD R3,R3,R3,LSL #1:ADD R3,R3,#1
  5491. (LDR R4,[R1,R3,LSL #2]:STR R4,[R2],#4
  5492. %LDR R3,[R2]:CMP R3,#F:MOVCS R3,#F
  5493. MOV R3,R3,LSR #bits-8
  5494. $ADD R3,R3,R3,LSL #1:ADD R3,R3,#2
  5495. [OPT Z
  5496. (LDR R4,[R1,R3,LSL #2]:STR R4,[R2],#4
  5497. SUBS R0,R0,#1
  5498. BNE equallp
  5499. MOVS PC,R14
  5500.  "FN800","FN801","FN1000","FN1001"
  5501. [OPT Z
  5502. .rlexpand%
  5503. LDR R0,[R9]
  5504. LDR R1,[R0]
  5505. LDR R2,[R9,#8]:LDR R2,[R2]
  5506. LDR R3,[R9,#16]
  5507. LDR R4,[R3]
  5508. CMP R4,#1:MOVLTS PC,R14
  5509. LDR R5,[R9,#24]:LDR R5,[R5]
  5510. STRB R2,[R1],#1
  5511. SUB R4,R4,#1
  5512. CMP R1,R5
  5513. TEQNE R4,#0
  5514. BNE rle
  5515. .rlexit
  5516. STR R1,[R0]
  5517. STR R4,[R3]
  5518. MOVS PC,R14
  5519.  "FN902"
  5520. [OPT Z
  5521. .unpack%
  5522. LDR R0,[R9]
  5523. LDR R0,[R0]
  5524. LDR R1,plbuff
  5525. ADD R2,R0,#768
  5526. .unpackloop
  5527. LDR R3,[R0],#4
  5528. MOV R5,#0
  5529. .bitloop
  5530. MOV R6,R3,LSR R5
  5531.  R6,R6,#15
  5532. ADD R5,R5,#4
  5533. MOV R7,R3,LSR R5
  5534.  R7,R7,#15
  5535. ADD R5,R5,#4
  5536. STRB R7,[R1],#1
  5537. STRB R6,[R1],#1
  5538. CMP R5,#32
  5539. BNE bitloop
  5540. CMP R2,R0
  5541. BNE unpackloop
  5542. MOV PC,R14
  5543. .plbuff EQUD plbuff%
  5544.  "FN1601","FN1501","FN1850","FN1851"
  5545. [OPT Z
  5546. .readiff%
  5547. MOV R1,#c%
  5548. LDR R8,[R9]:LDR R8,[R8]
  5549. ,+LDR R7,[R9,#8]:LDR R7,[R7]:ADD R7,R7,R8
  5550. STMFD SP !,{R14}
  5551.  r$="FN1850" 
  5552.  r$="FN1851" 
  5553. [OPT Z
  5554. BL bytefromcache%
  5555.  sy%>250 
  5556. [OPT Z
  5557. BL bytefromcache%
  5558. [OPT Z
  5559. BL bytefromcache%
  5560. CMP R0,#128
  5561. BCC rle1
  5562. RSB R2,R0,#256
  5563. BL bytefromcache%
  5564. .rle0 STRB R0,[R8],#1
  5565. SUBS R2,R2,#1
  5566. BPL rle0
  5567. B rle2
  5568. D    .rle1
  5569. ADD R3,R0,#1
  5570. MOV R2,R8
  5571. ADD R8,R8,R3
  5572. BL multibytefromcache%
  5573. I    .rle2
  5574. CMP R8,R7
  5575. BCC rle
  5576. LDMFD SP !,{R14}
  5577. MOVS PC,R14
  5578.  "FN1900","FN1100","FN400"
  5579. [OPT Z
  5580. .readline%
  5581. LDR R2,[R9]:LDR R2,[R2]
  5582. LDR R3,[R9,#8]
  5583. LDR R0,[R3]
  5584. LDR R4,[R9,#16]
  5585. LDR R5,[R4]
  5586. W,LDR R6,[R9,#24]:LDR R6,[R6]:ADD R6,R6,R2
  5587. STMFD SP !,{R14}
  5588. CMP R5,#1
  5589. BGE rle1
  5590. BL bytefromcache%
  5591. MOV R5,#1
  5592.  flag=1900 
  5593. [OPT Z
  5594. CMP R0,#192
  5595. CS R5,R0,#63:BLCS bytefromcache%
  5596.  flag=1100 
  5597. [OPT Z
  5598. CMP R0,#128
  5599. BNE rle1
  5600. BL bytefromcache%
  5601. TEQ R0,#0
  5602. Q R0,#128
  5603. BEQ rle1
  5604. ADD R5,R0,#1
  5605. BL bytefromcache%
  5606.  flag=400 
  5607. [OPT Z
  5608. MOV R1,R0
  5609. BL bytefromcache%
  5610. R R1,R1,R0,LSL #8
  5611. BL bytefromcache%
  5612. R R1,R1,R0,LSL #16
  5613. BL bytefromcache%
  5614. ADD R5,R0,#1
  5615. MOV R0,R1
  5616.  flag=200 
  5617. [OPT Z
  5618. ADD R5,R0,#1
  5619. BL bytefromcache%
  5620. [OPT Z
  5621.     .rle1
  5622. STRB R0,[R2],#1
  5623.  flag=400 
  5624. [OPT Z
  5625. MOV R1,R0,LSR #8
  5626. STRB R1,[R2],#1
  5627. MOV R1,R0,LSR #16
  5628. STRB R1,[R2],#1
  5629. [OPT Z
  5630. SUB R5,R5,#1
  5631. TEQ R2,R6
  5632. BNE rle
  5633. .rlexit
  5634. STR R0,[R3]:STR R5,[R4]
  5635. LDMFD SP !,{PC}^
  5636.  "FN2401"
  5637. [OPT Z
  5638. .bm_rle8
  5639. MOV R1,#c%
  5640. LDR R8,[R9]:LDR R8,[R8]
  5641. +LDR R7,[R9,#8]:LDR R7,[R7]:ADD R7,R7,R8
  5642. STMFD SP !,{R14}
  5643. BL bytefromcache%
  5644. TEQ r0,#0
  5645. BEQ rlecopy
  5646. MOV r4,r0
  5647. BL bytefromcache%
  5648.     .rle1
  5649. STRB r0,[r8],#1
  5650. SUBS r4,r4,#1
  5651. BGT rle1
  5652.     B rle
  5653. .rlecopy
  5654. BL bytefromcache%
  5655. CMP r0,#3
  5656. BLT rlespecial
  5657. MOV r4,r0
  5658.     .rle2
  5659. BL bytefromcache%
  5660. STRB r0,[r8],#1
  5661. BL bytefromcache%
  5662. SUBS r4,r4,#1
  5663. STRGTB r0,[r8],#1
  5664. SUBGTS r4,r4,#1
  5665. BGT rle2
  5666.     B rle
  5667. .rlespecial
  5668. LDMFD SP !,{R14}
  5669. MOVS PC,R14
  5670.  "FN2402"
  5671. [OPT Z
  5672. .bm_rle4
  5673. MOV R1,#c%
  5674. LDR R8,[R9]:LDR R8,[R8]
  5675. +LDR R7,[R9,#8]:LDR R7,[R7]:ADD R7,R7,R8
  5676. STMFD SP !,{R14}
  5677. MOV r2,#0
  5678. MOV r3,#0
  5679. BL bytefromcache%
  5680. TEQ r0,#0
  5681. BEQ rlecopy
  5682. MOV r4,r0
  5683. BL bytefromcache%
  5684.     .rle1
  5685. BL bmrle4_insert
  5686. CMP r3,#8
  5687. MOVGE r5,r2,LSR#24
  5688. STRGEB r5,[r8],#1
  5689. MOVGE r2,r2,LSL#8
  5690. SUBGE r3,r3,#8
  5691. CMP r4,#0
  5692. BGT rle1
  5693.     B rle
  5694. .rlecopy
  5695. BL bytefromcache%
  5696. CMP r0,#3
  5697. BLT rlespecial
  5698. MOV r4,r0
  5699.     .rle2
  5700. BL bytefromcache%
  5701. BL bmrle4_insert
  5702. BL bytefromcache%
  5703. CMP r4,#0
  5704. BLGT bmrle4_insert
  5705. B rle4
  5706.     .rle3
  5707. MOV r5,r2,LSR#24
  5708. STRB r5,[r8],#1
  5709. MOV r2,r2,LSL#8
  5710. SUB r3,r3,#8
  5711.     .rle4
  5712. CMP r3,#8
  5713. BGE rle3
  5714. CMP r4,#0
  5715. BGT rle2
  5716.     B rle
  5717. .rlespecial
  5718. CMP r3,#0
  5719. MOVGT r5,r2,LSR#24
  5720. STRGTB r5,[r8],#1
  5721. LDMFD SP !,{R14}
  5722. MOVS PC,R14
  5723. .bmrle4_insert
  5724. RSB r5,r3,#32
  5725. MOV r2,r2,LSR r5
  5726. MOV r2,r2,LSL r5
  5727. SUB r5,r5,#8
  5728. R r2,r2,r0,LSL r5
  5729. SUBS r4,r4,#2
  5730. ADDMI r3,r3,#4
  5731. ADDPL r3,r3,#8
  5732. MOVS PC,R14
  5733.  cachebytes% 
  5734. [OPT Z
  5735. .bytefromcache%
  5736. STMFD SP !,{R1,R2}
  5737. LDR R1,incacheptr
  5738. LDR R2,numlefttogo
  5739. LDRB R0,[R1],#1
  5740. SUBS R2,R2,#1
  5741. STRNE R1,incacheptr
  5742. STRNE R2,numlefttogo
  5743. LDMFD SP !,{R1,R2}
  5744. MOVNE PC,R14
  5745. STMFD SP !,{R0,R1,R2,R3,R4}
  5746. LDR R2,valdatacache
  5747. STR R2,incacheptr
  5748. LDR R3,valcache
  5749. STR R3,numlefttogo
  5750. MOV R0,#4
  5751. MOV R1,#c%
  5752. SWI "OS_GBPB"
  5753. LDMFD SP !,{R0,R1,R2,R3,R4}
  5754. MOV PC,R14
  5755.  .valdatacache DCD datacache%
  5756. .valcache DCD cache%
  5757. .incacheptr DCD datacache%
  5758. .numlefttogo DCD cache%
  5759. .multibytefromcache%
  5760. CMP R3,#0
  5761. Q PC,R14
  5762. STMFD SP !,{R0,R14}
  5763. .multibytefromcachel
  5764. BL bytefromcache%
  5765. STRB R0,[R2],#1
  5766. SUBS R3,R3,#1
  5767. BNE multibytefromcachel
  5768. LDMFD SP !,{R0,R14}
  5769. MOV PC,R14
  5770.  planar%<0 
  5771. C%=7:
  5772.  flag=2600 C%=15
  5773. [OPT Z
  5774. .plancnv%
  5775. LDR R0,sxloc
  5776. LDR R1,[R9]:LDR R1,[R1]
  5777. LDR R3,[R9,#8]:LDR R3,[R3]
  5778. LDR R4,[R9,#16]:LDR R4,[R4]
  5779.  flag=3500 
  5780. [OPT Z
  5781. MOV R9,#0
  5782. [OPT Z
  5783. MOV R9,#C%
  5784. [OPT Z
  5785. .planelp
  5786. MOV R7,#0
  5787. MOV R5,R3
  5788.  N%=1
  5789. planes%
  5790. [OPT Z
  5791. LDR R6,[R5],R4
  5792.  flag=2600 
  5793. [OPT Z
  5794. MOV R6,R6,LSL #8
  5795. BIC R6,R6,#&FF000000
  5796. R R6,R6,R6,LSR #16
  5797.  flag=3500 
  5798. [OPT Z
  5799. MOV R6,R6,LSR R9
  5800. S R6,R6,#1
  5801. R R7,R7,R6,LSL #(planes%-N%)
  5802. RNE R7,R7,#(planes%-1)
  5803. [OPT Z
  5804. MOV R6,R6,LSR R9
  5805.  R6,R6,#1
  5806. R R7,R7,R6,LSL #(N%-1)
  5807. [OPT Z
  5808. STRB R7,[R1],#1
  5809.  flag=3500 
  5810. [OPT Z
  5811. ADD R9,R9,#1
  5812. CMP R9,#C%+1
  5813. Q R9,#0
  5814. [OPT Z
  5815. SUBS R9,R9,#1:MOVMI R9,#C%
  5816.  flag 
  5817.  2600
  5818. [OPT Z
  5819. MOVMI R3,R5
  5820.  3500
  5821. [OPT Z
  5822. ADDEQ R3,R3,#1
  5823. [OPT Z
  5824. ADDMI R3,R3,#1
  5825. [OPT Z
  5826. SUBS R0,R0,#1:BNE planelp
  5827. MOVS PC,R14
  5828. cputime%=
  5829.  cache% 
  5830.  flag=3600 
  5831. zEpcdblk%!12=cacherows%:
  5832. refillpcd:
  5833.  cache%>=filesize% rowstogo%=-1
  5834.  striprows%>0
  5835. compression>1 
  5836. 12,4,c%,datacache%,cache%
  5837.  cachebytes% !incacheptr=datacache%:!numlefttogo=cache%
  5838. refill:
  5839.  cache%>=filesize% rowstogo%=-1
  5840. sizeshft%=0:
  5841.  ncol 
  5842.  2^24-1:size%=1
  5843.  2^15-1:size%=1
  5844.  63,255,256:size%=1
  5845.  15:size%=2:sizeshft%=1
  5846.  3:size%=4:sizeshft%=2
  5847.  1:size%=8:sizeshft%=3:
  5848.  m$="C" size%=2:sizeshft%=1
  5849.  m$="D" size%=4:sizeshft%=2
  5850.  m$="T" size%=2:sizeshft%=1
  5851.  flag 
  5852.  501:
  5853.  info% 
  5854. "Reading interlaced GIF"
  5855. %sz%=sx%*sy%:plbuff%=
  5856. dim(sz%+100)
  5857.  Y%=0
  5858. sy%-1
  5859. 8:X%=plbuff%+Y%*sx%:
  5860.  LZWdecode%,table%(0),c%,X%,sx%:
  5861.  Y%=4
  5862. sy%-1
  5863. 8:X%=plbuff%+Y%*sx%:
  5864.  LZWdecode%,table%(0),c%,X%,sx%:
  5865.  Y%=2
  5866. sy%-1
  5867. 4:X%=plbuff%+Y%*sx%:
  5868.  LZWdecode%,table%(0),c%,X%,sx%:
  5869.  Y%=1
  5870. sy%-1
  5871. 2:X%=plbuff%+Y%*sx%:
  5872.  LZWdecode%,table%(0),c%,X%,sx%:
  5873. ?datacache%=plbuff%:buff%=plbuff%:rowbytes%=sx%:rowstogo%=-1
  5874.  gamma<>1 
  5875.  gamma<>0 
  5876.  k=1/gamma:
  5877.  C%=0
  5878. colourindex
  5879.  r%(C%) r%(C%)=((r%(C%)/F)^k)*F
  5880.  g%(C%) g%(C%)=((g%(C%)/F)^k)*F
  5881.  b%(C%) b%(C%)=((b%(C%)/F)^k)*F
  5882. rmax=F:gmax=F:bmax=F
  5883.  col=0 
  5884.  input<9 
  5885.  C%=0
  5886. 255:r%(C%)=r%(C%)*rwt+g%(C%)*gwt+b%(C%)*bwt:
  5887.  input<400 
  5888. $rmax=F*rwt:gmax=F*gwt:bmax=F*bwt
  5889.  C%=0
  5890. colourindex:r%(C%)=r%(C%)*rwt:g%(C%)=g%(C%)*gwt:b%(C%)=b%(C%)*bwt:
  5891. order% 
  5892. adjustpalette(1/ydiv%/xdiv%,0)
  5893.  range% 
  5894.  info% 
  5895. "Scanning data to compute parameters for '-range'"
  5896.  order% 
  5897. Y%=0:
  5898.  hour%,Y%*100
  5899. (r$+"(xp%())"):
  5900.  maxmin%,xp%(1,0),totvals2%:Y%+=1
  5901.  Y%=sy% 
  5902. !min<255 
  5903. !max+255>=F
  5904. 'Y%=0:ysamp%=1:
  5905.  hour%,Y%*100
  5906. scaledpixelrow(cl%()):
  5907.  maxmin%,cl%(1,0),totvals%:Y%+=1
  5908.  Y%=y% 
  5909.  !min<255 
  5910.  !max+255>=F
  5911. !max+255>=F 
  5912. !min<255 range%=
  5913. :range$="No point in '-range' on this image"
  5914.  range% 
  5915. adjustpalette(F/(!max-!min),!min/ydiv%/xdiv%):range$="Input image maximum "+
  5916. (!max/F*100)+"% minimum "+
  5917. (!min/F*100)+"%"
  5918. rewind:
  5919.  info% 
  5920.  range$
  5921.  hist% 
  5922. equal% 
  5923.  equal% 
  5924.  info% 
  5925. "Scanning data to compute parameters for '-equal'"
  5926.  order% 
  5927.  yr%=0
  5928. sy%-1:
  5929.  hour%,yr%*100
  5930. (r$+"(xp%())"):
  5931.  histo%,xp%(1,0),vals%(0,0),sx%
  5932. .ysamp%=1:
  5933.  yr%=0
  5934. y%-1:
  5935.  hour%,yr%*100
  5936. scaledpixelrow(cl%()):
  5937.  histo%,cl%(1,0),vals%(0,0),x%
  5938.  info% 
  5939. "Done. Now processing the picture"
  5940.  input<400 
  5941.  C%=0
  5942. colourindex
  5943.  r%(C%)<0 r%(C%)=0
  5944.  g%(C%)<0 g%(C%)=0
  5945.  b%(C%)<0 b%(C%)=0
  5946.  r%(C%)>rmax r%(C%)=rmax
  5947.  g%(C%)>gmax g%(C%)=gmax
  5948.  b%(C%)>bmax b%(C%)=bmax
  5949.  hist% 
  5950. M%=0:ZM%=-1:
  5951.  C%=0
  5952.  Z%=0
  5953.  vals%(Z%,C%)>M% M%=vals%(Z%,C%):ZM%=Z%
  5954.  ZM%=-1 
  5955.  okinfo%=0 
  5956.  col>0 
  5957. 66:ht=500
  5958. <>66 
  5959. 16:ht=400
  5960. 0,6,2000,6
  5961. 18:ht=400:
  5962. 0,6,1024,6
  5963. $M=M%/(ht*2-8):
  5964.  C%=0
  5965.  col>0 
  5966.  Z%=0
  5967.  vals%(Z%,C%) X%=Z%*3+C%<<1:
  5968.  X%,8,X%,vals%(Z%,C%)/M+8
  5969.  Z%=0
  5970.  vals%(Z%,C%) X%=Z%<<2:
  5971.  X%,8,2,vals%(Z%,C%)/M
  5972. close:
  5973. "Hourglass_Off"
  5974.  m>=0 oname$="p"+
  5975.  m+m$ 
  5976.  oname$=m$
  5977.  m=-6 
  5978. m=-7 
  5979. m=-8 oname$=pnm$
  5980.  range% oname$+="r"
  5981.  equal% oname$+="e"
  5982.  sharpen% oname$+="s"+
  5983.  sharpen%
  5984.  black% oname$+="b"+
  5985.  black%
  5986.  gamma<>1 A%=@%:@%=&1020100:oname$+="g"+
  5987.  gamma:@%=A%
  5988.  bright%=16 oname$+="b"
  5989. *xsp%=x%:ysp%=y%:
  5990.  rotate% 
  5991.  xsp%,ysp%
  5992.  rotate% 
  5993.  hflip% 
  5994.  vflip% 
  5995.  m=-9 
  5996.  m=-10 
  5997.  m-=2
  5998.  m=-9
  5999. m=-10 
  6000.  jpq%(20)
  6001. [jpq%()=60,75,90,105,120,135,150,160,170,180,190,205,215,235,255,280,320,380,500,750,850
  6002.  -1:xwords%=xsp%:sz%=xwords%*ysp%:Y%=ysp%
  6003. getoutput(sz%,0,xwords%,Y%):base%=ram%
  6004.  -3,-5:xwords%=xsp%*2:sz%=xwords%*ysp%:Y%=ysp%
  6005. getoutput(sz%,0,xwords%,Y%):base%=ram%
  6006.  -4:xwords%=xsp%*3:sz%=xwords%*ysp%:Y%=ysp%
  6007. getoutput(sz%,0,xwords%,Y%):base%=ram%
  6008.  -6:xwords%=xsp%*2+3
  6009. 3:sz%=xwords%*ysp%:Y%=ysp%
  6010. 'A%=Y%:
  6011. getoutput(sz%,64,xwords%,Y%)
  6012. 1ram%!4=0:ram%!8=16:ram%!12=16:
  6013. &2e,&109,ram%
  6014. &2e,&10f,ram%,oname$,0,xsp%*2,Y%,28
  6015. Jbase%=ram%+ram%!8:base%!(5*4)=A%-1:!base%=!base%-Y%*xwords%+A%*xwords%
  6016. )ram%!12=ram%!12-Y%*xwords%+A%*xwords%
  6017. >base%!(10*4)=5<<27 
  6018.  nx<<1 
  6019.  ny<<14 
  6020.  1:base%+=base%!(8*4)
  6021.  -7:xwords%=xsp%*3+3
  6022. 3:sz%=xwords%*ysp%:Y%=ysp%
  6023.     'A%=Y%:
  6024. getoutput(sz%,64,xwords%,Y%)
  6025. 1ram%!4=0:ram%!8=16:ram%!12=16:
  6026. &2e,&109,ram%
  6027. &2e,&10f,ram%,oname$,0,xsp%*3,Y%,28
  6028. Jbase%=ram%+ram%!8:base%!(5*4)=A%-1:!base%=!base%-Y%*xwords%+A%*xwords%
  6029. )ram%!12=ram%!12-Y%*xwords%+A%*xwords%
  6030. Bbase%!(10*4)=panic<<27 
  6031.  nx<<1 
  6032.  ny<<14 
  6033.  1:base%+=base%!(8*4)
  6034. 4no magic number yet for new format 24bpp sprites
  6035.  -8:xwords%=xsp%*4:sz%=xwords%*ysp%:Y%=ysp%
  6036. 'A%=Y%:
  6037. getoutput(sz%,64,xwords%,Y%)
  6038. 1ram%!4=0:ram%!8=16:ram%!12=16:
  6039. &2e,&109,ram%
  6040. &2e,&10f,ram%,oname$,0,xsp%*4,Y%,28
  6041. Jbase%=ram%+ram%!8:base%!(5*4)=A%-1:!base%=!base%-Y%*xwords%+A%*xwords%
  6042. )ram%!12=ram%!12-Y%*xwords%+A%*xwords%
  6043. >base%!(10*4)=6<<27 
  6044.  nx<<1 
  6045.  ny<<14 
  6046.  1:base%+=base%!(8*4)
  6047.  -9:xwords%=xsp%+3
  6048. 3:sz%=(xsp%+7
  6049. 7)*(ysp%+7
  6050. 7):Y%=ysp%
  6051. )sz%=sz%*jpq%(jpegquality%
  6052. 5)/588+1024
  6053. &jpegwrk%=
  6054. dim((xsp%+7
  6055. 7)*9+20000)
  6056. base%=
  6057. dim(xwords%)
  6058. getoutputjp(sz%)
  6059. N!ram%=xsp%:ram%!4=ysp%:ram%!8=jpegquality%:ram%!12=1:ram%!16=90:ram%!20=90
  6060. "CompressJPEG_Start",ram%,sz%,ram%,jpegwrk%,(xsp%+7
  6061. 7)*9+20000 
  6062.  jpegtag%
  6063.  -10:xwords%=xsp%*3+3
  6064. 3:sz%=(xsp%+15
  6065. 15)*(ysp%+15
  6066. 15)*12/8:Y%=ysp%
  6067. )sz%=sz%*jpq%(jpegquality%
  6068. 5)/588+1024
  6069.  )jpegwrk%=
  6070. dim((xsp%+15
  6071. 15)*30+20000)
  6072. base%=
  6073. dim(xwords%)
  6074. getoutputjp(sz%)
  6075. #N!ram%=xsp%:ram%!4=ysp%:ram%!8=jpegquality%:ram%!12=3:ram%!16=90:ram%!20=90
  6076. "CompressJPEG_Start",ram%,sz%,ram%,jpegwrk%,(xsp%+15
  6077. 15)*30+20000 
  6078.  jpegtag%
  6079.  -11:xwords%=xsp%:sz%=xwords%*ysp%+20000:Y%=ysp%
  6080. &&jpegwrk%=
  6081. dim((xsp%+7
  6082. 7)*9+20000)
  6083. getoutput(sz%,0,xwords%,Y%):base%=ram%+20000
  6084.  -12:xwords%=xsp%*3:sz%=xwords%*ysp%+20000:Y%=ysp%
  6085. ))jpegwrk%=
  6086. dim((xsp%+15
  6087. 15)*30+20000)
  6088. getoutput(sz%,0,xwords%,Y%):base%=ram%+20000
  6089. :xwords%=xsp%/size%+3.9999
  6090. 3:sz%=xwords%*ysp%:X%=xsp%:Y%=ysp%
  6091.  ncol=1 
  6092. "C":!rowinc=xwords%:xwords%=xwords%*4:sz%=xwords%*ysp%:X%=xsp%*4:Y%=ysp%*4
  6093. "T":!rowinc=xwords%:xwords%=xwords%*3:sz%=xwords%*ysp%:X%=xsp%*4:Y%=ysp%*3
  6094. "D":!rowinc=xwords%:xwords%=xwords%*2:sz%=xwords%*ysp%:X%=xsp%*2:Y%=ysp%*2
  6095. 3,A%=Y%:
  6096. getoutput(sz%,2048+64,xwords%,Y%)
  6097. 41ram%!4=0:ram%!8=16:ram%!12=16:
  6098. &2e,&109,ram%
  6099. &2e,&10f,ram%,oname$,(ncol<63)
  6100. 1,X%,Y%,spm
  6101. 6Jbase%=ram%+ram%!8:base%!(5*4)=A%-1:!base%=!base%-Y%*xwords%+A%*xwords%
  6102. 7)ram%!12=ram%!12-Y%*xwords%+A%*xwords%
  6103. 8&pal%=base%+11*4:base%+=base%!(8*4)
  6104.  ncol 
  6105. ;R!(pal%-8)+=2048:!(pal%-12)+=2048:base%+=2048:!(ram%+12)+=2048:!(pal%-44)+=2048
  6106.  Z%=0
  6107. 255:B%=Z%
  6108. Z%<<8
  6109. Z%<<16:B%=B%<<8
  6110. =%pal%!(Z%*8)=B%:pal%!(Z%*8+4)=B%:
  6111. ?R!(pal%-8)+=2048:!(pal%-12)+=2048:base%+=2048:!(ram%+12)+=2048:!(pal%-44)+=2048
  6112.  Z%=0
  6113. 255:B%=palette%!(Z%<<2)<<8
  6114. A%pal%!(Z%*8)=B%:pal%!(Z%*8+4)=B%:
  6115.  Z%=0
  6116. col(Z%,palette%!(Z%<<2)
  6117. &F0F0F0):
  6118.  Z%=0
  6119. 7:A%=0:
  6120. 1 A%+=&F0
  6121. 2 A%+=&F000
  6122. 4 A%+=&F00000
  6123. col(Z%,A%):
  6124.  Z%=0
  6125. 15:A%=Z%<<4:
  6126. col(Z%,A%
  6127. A%<<8
  6128. A%<<16):
  6129.  Z%=0
  6130. 15:A%=(Z%
  6131. 7)/7*15+.2<<4:
  6132. col(Z%,A%
  6133. A%<<8
  6134. A%<<16):
  6135. col(0,0):
  6136. col(1,&F0F000):
  6137. col(2,&F000F0):
  6138. col(3,&F0F0)
  6139.  Z%=0
  6140. col(Z%,palette%!(Z%<<2)
  6141. &F0F0F0):
  6142.  Z%=0
  6143. 3:A%=Z%*5<<4:
  6144. col(Z%,A%
  6145. A%<<8
  6146. A%<<16):
  6147. col(0,0):
  6148. col(1,&F0F0F0)
  6149.  flex% 
  6150.  workspace%<0 
  6151. _/P%=
  6152. :[OPT 0:STR r13,P%+16:MOVS Pc,r14:]:
  6153. +32*1024+
  6154.  base%*size%>2^32 
  6155.  42,"base%*size% product too large"
  6156. Save:
  6157. $+" internal ("+
  6158.  SYS"Hourglass_LEDs",3
  6159. h$ysamp%=1:nl%()=0:step%=4*(col+1)
  6160. iIaddr%=base%<<sizeshft%:rowstep%=xwords%*size%:colstep%=1:dist%=xsp%-1
  6161.  m=-3
  6162. m=-6 dist%=dist%*2
  6163.  m=-4
  6164. m=-10
  6165. m=-12 dist%=dist%*3
  6166.  m=-8 dist%=dist%*4
  6167.  rotate% 
  6168. n6odist%=dist%:
  6169.  colstep%,rowstep%:
  6170.  hflip%,vflip%
  6171.  rotate%=1 
  6172. pGaddr%+=(ysp%-1)*colstep%:colstep%=-colstep%:dist%=(ysp%-1)*colstep%
  6173. r;addr%+=dist%:rowstep%=-rowstep%:dist%=(ysp%-1)*colstep%
  6174.  m=-3
  6175. m=-6 colstep%=colstep%/2:rowstep%=rowstep%*2
  6176.  m=-4
  6177. m=-10
  6178. m=-12 colstep%=colstep%/3:rowstep%=rowstep%*3
  6179.  m=-8 colstep%=colstep%/4:rowstep%=rowstep%*4
  6180.  hflip% 
  6181. y0addr%+=dist%:dist%=-dist%:colstep%=-colstep%
  6182.  vflip% 
  6183.  rotate% 
  6184. },addr%+=odist%*rotate%:rowstep%=-rowstep%
  6185. /addr%+=(ysp%-1)*rowstep%:rowstep%=-rowstep%
  6186. Soutlim%=((base%+xwords%*Y%)<<sizeshft%)-1:oddcolstep%=-colstep%:oddstep%=-step%
  6187.  order% 
  6188. adjustpalette(1/ydiv%/xdiv%,0)
  6189.  m=-9
  6190. m=-10 
  6191.  "OS_SWINumberFromString",,"CompressJPEG_WriteLine" 
  6192.  sy%=y% 
  6193.  sx%=x% 
  6194.  range%=
  6195.  sharpen%=
  6196.  equal%=
  6197.  dither% 
  6198.  yr%=0 
  6199.  y%-1:
  6200.  hour%,yr%*100
  6201. (r$+"(cl%())"):cl%()=cl%()+nl%():nl%()=0:B%=x%
  6202.  fs%,colstep%,cl%(1,0),nl%(1,0),addr%,step%,B%
  6203. GA%=addr%+dist%:
  6204.  fs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B%
  6205.  wl%,jpegtag%,addr%
  6206. KI%=step%:
  6207.  yr%=0
  6208. y%-1:
  6209.  hour%,yr%*100
  6210.  addr%>outlim% 
  6211. flushoutput
  6212. (r$+"(cl%())"):B%=x%:
  6213.  fs%,colstep%,cl%(1,0),I%,addr%,I%,B%
  6214.  wl%,jpegtag%,addr%
  6215.  equal% 
  6216. rewind:Havg%=
  6217. (vals%())/256/(col+1):
  6218.  new%(256,col)
  6219.  B%=0
  6220. col:R%=0:Hint%=0:
  6221.  Z%=0
  6222. 256:L%=R%:Hint%+=vals%(Z%,B%)
  6223.  Hint%>Havg%:Hint%-=Havg%:R%+=1:
  6224. new%(Z%,B%)=(L%+R%)/2*F/256
  6225.  sharpen% 
  6226.  order% 
  6227. ;yread%=sy%-1:W%=
  6228. (r$+"(rm1%())"):
  6229.  equal% 
  6230. fit2(rm1%())
  6231.  B%=0
  6232. col:rm1%(0,B%)=rm1%(1,B%):rm1%(sx%+1,B%)=rm1%(sx%,B%):
  6233. =yread%=y%-1:
  6234. scaledpixelrow(rm1%()):
  6235.  equal% 
  6236. fit(rm1%())
  6237.  B%=0
  6238. col:rm1%(0,B%)=rm1%(1,B%):rm1%(x%+1,B%)=rm1%(x%,B%):
  6239. rm2%()=rm1%()
  6240.  order% 
  6241.  yr%=0 
  6242.  y%-1
  6243.  hour%,yr%*100
  6244.  addr%>outlim% 
  6245. flushoutput
  6246.  sy%=y% 
  6247. sharppixelrow(cl%())
  6248. ;ysamp%-=1:
  6249.  ysamp%=0 
  6250. sharppixelrow(xl%()):ysamp%=ymul%
  6251.  ydiv%=1 
  6252. cl%()=xl%()
  6253.  ysamp%>=ydiv% 
  6254. #ysamp%-=ydiv%:cl%()=xl%()*ydiv%
  6255. /cl%()=xl%()*ysamp%:Y%=ydiv%-ysamp%:ysamp%=0
  6256.  ysamp%=0 
  6257. sharppixelrow(xl%()):ysamp%=ymul%
  6258.  ysamp%>Y% 
  6259. 6ysamp%-=Y%:xl2%()=xl%()*Y%:cl%()=cl%()+xl2%():Y%=0
  6260. >Y%-=ysamp%:xl2%()=xl%()*ysamp%:cl%()=cl%()+xl2%():ysamp%=0
  6261.  Y%=0
  6262. ysamp%+=1
  6263. 2cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%+dist%
  6264.  fs%,colstep%,cl%(1,0),nl%(1,0),addr%,step%,B%
  6265.  fs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B%
  6266.  wl%,jpegtag%,addr%
  6267.  yr%=0 
  6268.  y%-1
  6269.  hour%,yr%*100
  6270.  addr%>outlim% 
  6271. flushoutput
  6272.  sharpen% 
  6273.  yread% yread%-=1:
  6274. scaledpixelrow(rm%()):
  6275.  equal% 
  6276. fit(rm%())
  6277.  B%=0
  6278. col:rm%(0,B%)=rm%(1,B%):rm%(x%+1,B%)=rm%(x%,B%):
  6279.  sharp%,cl%(1,0),rm%(1,0),rm1%(1,0),rm2%(1,0),totvals%
  6280.  rm2%(),rm1%():rm1%()=rm%()
  6281. scaledpixelrow(cl%()):
  6282.  equal% 
  6283. fit(cl%())
  6284. 2cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%+dist%
  6285.  fs%,colstep%,cl%(1,0),nl%(1,0),addr%,step%,B%
  6286.  fs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B%
  6287.  wl%,jpegtag%,addr%
  6288. "CompressJPEG_Finish",jpegtag% 
  6289.  jpegsize%
  6290.  sy%=y% 
  6291.  sx%=x% 
  6292.  range%=
  6293.  sharpen%=
  6294.  equal%=
  6295.  dither% 
  6296.  yr%=0 
  6297.  y%-1:
  6298.  hour%,yr%*100
  6299.  addr%>outlim% 
  6300. flushoutput
  6301. (r$+"(cl%())"):cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%:addr%+=rowstep%
  6302.  fs%,colstep%,cl%(1,0),nl%(1,0),A%,step%,B%
  6303. BA%+=dist%:
  6304.  fs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B%
  6305. KI%=step%:
  6306.  yr%=0
  6307. y%-1:
  6308.  hour%,yr%*100
  6309.  addr%>outlim% 
  6310. flushoutput
  6311. (r$+"(cl%())"):B%=x%:A%=addr%:addr%+=rowstep%:
  6312.  fs%,colstep%,cl%(1,0),I%,A%,I%,B%
  6313.  equal% 
  6314. rewind:Havg%=
  6315. (vals%())/256/(col+1):
  6316.  new%(256,col)
  6317.  B%=0
  6318. col:R%=0:Hint%=0:
  6319.  Z%=0
  6320. 256:L%=R%:Hint%+=vals%(Z%,B%)
  6321.  Hint%>Havg%:Hint%-=Havg%:R%+=1:
  6322. new%(Z%,B%)=(L%+R%)/2*F/256
  6323.  sharpen% 
  6324.  order% 
  6325. ;yread%=sy%-1:W%=
  6326. (r$+"(rm1%())"):
  6327.  equal% 
  6328. fit2(rm1%())
  6329.  B%=0
  6330. col:rm1%(0,B%)=rm1%(1,B%):rm1%(sx%+1,B%)=rm1%(sx%,B%):
  6331. =yread%=y%-1:
  6332. scaledpixelrow(rm1%()):
  6333.  equal% 
  6334. fit(rm1%())
  6335.  B%=0
  6336. col:rm1%(0,B%)=rm1%(1,B%):rm1%(x%+1,B%)=rm1%(x%,B%):
  6337. rm2%()=rm1%()
  6338.  order% 
  6339.  yr%=0 
  6340.  y%-1
  6341.  hour%,yr%*100
  6342.  addr%>outlim% 
  6343. flushoutput
  6344.  sy%=y% 
  6345. sharppixelrow(cl%())
  6346.     ;ysamp%-=1:
  6347.  ysamp%=0 
  6348. sharppixelrow(xl%()):ysamp%=ymul%
  6349.  ydiv%=1 
  6350. cl%()=xl%()
  6351.  ysamp%>=ydiv% 
  6352. #ysamp%-=ydiv%:cl%()=xl%()*ydiv%
  6353. /cl%()=xl%()*ysamp%:Y%=ydiv%-ysamp%:ysamp%=0
  6354.  ysamp%=0 
  6355. sharppixelrow(xl%()):ysamp%=ymul%
  6356.  ysamp%>Y% 
  6357. 6ysamp%-=Y%:xl2%()=xl%()*Y%:cl%()=cl%()+xl2%():Y%=0
  6358. >Y%-=ysamp%:xl2%()=xl%()*ysamp%:cl%()=cl%()+xl2%():ysamp%=0
  6359.  Y%=0
  6360. ysamp%+=1
  6361. <cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%:addr%+=rowstep%
  6362.  fs%,colstep%,cl%(1,0),nl%(1,0),A%,step%,B%
  6363. !BA%+=dist%:
  6364.  fs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B%
  6365.  yr%=0 
  6366.  y%-1
  6367.  hour%,yr%*100
  6368.  addr%>outlim% 
  6369. flushoutput
  6370.  sharpen% 
  6371.  yread% yread%-=1:
  6372. scaledpixelrow(rm%()):
  6373.  equal% 
  6374. fit(rm%())
  6375.  B%=0
  6376. col:rm%(0,B%)=rm%(1,B%):rm%(x%+1,B%)=rm%(x%,B%):
  6377.  sharp%,cl%(1,0),rm%(1,0),rm1%(1,0),rm2%(1,0),totvals%
  6378.  rm2%(),rm1%():rm1%()=rm%()
  6379. scaledpixelrow(cl%()):
  6380.  equal% 
  6381. fit(cl%())
  6382. /<cl%()=cl%()+nl%():nl%()=0:B%=x%:A%=addr%:addr%+=rowstep%
  6383.  fs%,colstep%,cl%(1,0),nl%(1,0),A%,step%,B%
  6384. 3BA%+=dist%:
  6385.  fs%,oddcolstep%,cl%(x%,0),nl%(x%,0),A%,oddstep%,B%
  6386.  m=-11
  6387. m=-12 
  6388.  "OS_SWINumberFromString",,"CompressJPEG_WriteLine" 
  6389.  m=-11 
  6390. ;N!ram%=xsp%:ram%!4=ysp%:ram%!8=jpegquality%:ram%!12=1:ram%!16=90:ram%!20=90
  6391. "CompressJPEG_Start",ram%,sz%,ram%,jpegwrk%,(xsp%+7
  6392. 7)*9+20000 
  6393.  jpegtag%
  6394. >N!ram%=xsp%:ram%!4=ysp%:ram%!8=jpegquality%:ram%!12=3:ram%!16=90:ram%!20=90
  6395. "CompressJPEG_Start",ram%,sz%,ram%,jpegwrk%,(xsp%+15
  6396. 15)*30+20000 
  6397.  jpegtag%
  6398. addr%=ram%+20000
  6399.  yr%=0
  6400. ysp%-1
  6401.  hour%,yr%*100
  6402.  ysp%:
  6403.  wl%,jpegtag%,addr%:addr%+=xwords%
  6404. "CompressJPEG_Finish",jpegtag% 
  6405.  jpegsize%
  6406. cputime%=
  6407. -cputime%
  6408. srchdevlist
  6409. [OPT Z
  6410. M%CMP R4,#F:MOVCS R4,#0:MOVGE R4,#F
  6411. N>MOV R0,R4,LSR #(bits-k%):CMP R0,#1<<k%:MOVCS R0,#(1<<k%)-1
  6412. O%CMP R5,#F:MOVCS R5,#0:MOVGE R5,#F
  6413. PRMOV R3,R5,LSR #(bits-k%):CMP R3,#1<<k%:MOVCS R3,#(1<<k%)-1:
  6414. R R0,R0,R3,LSL #k%
  6415. Q%CMP R6,#F:MOVCS R6,#0:MOVGE R6,#F
  6416. RTMOV R3,R6,LSR #(bits-k%):CMP R3,#1<<k%:MOVCS R3,#(1<<k%)-1:
  6417. R R0,R0,R3,LSL #k%*2
  6418. STMFD SP !,{R8,R9,R10,R11}
  6419. LDR r3,ictloc
  6420. LDR r2,[r3,r0,LSL #2]
  6421. MOV r14,r2,lsr #24
  6422. CMP r14,#4
  6423. ADDCC r2,r3,r0,lsl #2
  6424. BICCS r2,r2,#&ff000000
  6425. LDRB r0,[r2],#1
  6426. SUBS r14,r14,#1
  6427. BEQ gotit
  6428. ADD r3,r0,r0,lsl #1
  6429. ADD r3,r7,r3,lsl #2
  6430. LDMIA r3,{r8,r9,r10}
  6431. SUBS r8,r8,r4
  6432. RSBMI r8,r8,#0
  6433. MOV r8,r8,lsr #bits/2
  6434. SUBS r9,r9,r5
  6435. RSBMI r9,r9,#0
  6436. MOV r9,r9,lsr #bits/2
  6437. SUBS r10,r10,r6
  6438. RSBMI r10,r10,#0
  6439. MOV r10,r10,lsr #bits/2
  6440. MUL r3,r8,r8
  6441. MUL r11,r9,r9
  6442. ADD r11,r11,r11,LSL #2
  6443. ADD r3,r3,r3,LSL #1
  6444. ADD r3,r3,r11,LSL #1
  6445. MLA r11,r10,r10,r3
  6446. .srchlist
  6447. LDRB r3,[r2],#1
  6448. ADD R8,R3,R3,LSL #1
  6449. ADD R8,R7,R8,LSL #2
  6450. LDMIA R8,{R8,R9,R10}
  6451. SUBS R9,R5,R9
  6452. RSBMI R9,R9,#0
  6453. MOV R3,R9,LSR #bits/2
  6454. MUL R9,R3,R3
  6455. ADD r9,r9,r9,LSL #2
  6456. CMP R11,R9,LSL #1
  6457. BCC srchquick
  6458. SUBS R8,R4,R8
  6459. RSBMI R8,R8,#0
  6460. MOV R3,R8,LSR #bits/2
  6461. MUL R8,r3,r3
  6462. ADD r8,r8,r8,LSL #1
  6463. ADD r8,r8,r9,LSL #1
  6464. SUBS R10,R6,R10
  6465. RSBMI R10,R10,#0
  6466. MOV R3,R10,LSR #bits/2
  6467. MLA R10,R3,R3,R8
  6468. CMP R10,R11
  6469. MOVCC R11,R10
  6470. LDRCCB R0,[r2,#-1]
  6471. .srchquick
  6472. SUBS R14,R14,#1
  6473. BNE srchlist
  6474. .gotit
  6475. +ADD R3,R0,R0,LSL #1:ADD R3,R7,R3,LSL #2
  6476. LDMIA R3,{R8,R9,R10}
  6477. +SUB R4,R4,R8:SUB R5,R5,R9:SUB R6,R6,R10
  6478. LDMFD r13!,{R8,R9,R10,R11}
  6479. getoutput(A%,E%,B%,
  6480.  A%>max% 
  6481.  rotate%=
  6482.  vflip%=
  6483. 3C%=max%
  6484.  B%+1:A%=xwords%*C%+E%:first%=
  6485. A%+=E%
  6486.  spritearea%<0 
  6487. 0ram%=
  6488. createarea(A%):
  6489.  ram%=-1 ram%=
  6490. dim(A%)
  6491. ram%=spritearea%
  6492. !ram%=A%
  6493. getoutputjp(
  6494.  spritearea%<0 
  6495. 4ram%=
  6496. createareajp(A%):
  6497.  ram%=-1 ram%=
  6498. dimjp(A%)
  6499. ram%=spritearea%
  6500. !ram%=A%
  6501. createarea(size%)
  6502. areanumber%=0
  6503.  &20066,0,-1,size%,-1,%10000000,size%,0,0,"ChangeFSI sprite" 
  6504.  ,areanumber%,,areabase%;V%
  6505.  areanumber%=0:=-1
  6506.  "OS_ReadDynamicArea",areanumber% 
  6507.  ,areasize%
  6508.  areasize%<size% 
  6509. removearea:
  6510.  42,"Couldn't create area"
  6511. =areabase%
  6512. createareajp(
  6513.  size%)
  6514. areanumber%=0
  6515.  &20066,0,-1,size%,-1,%10000000,size%,0,0,"ChangeFSI JPEG" 
  6516.  ,areanumber%,,areabase%;V%
  6517.  areanumber%=0:=-1
  6518.  "OS_ReadDynamicArea",areanumber% 
  6519.  ,areasize%:size%=areasize%
  6520. =areabase%
  6521. removearea
  6522.  areanumber% 
  6523.  "OS_DynamicArea",1,areanumber%:areanumber%=0
  6524. cachedim(size%)
  6525. cacheareanumber%=0
  6526.  &20066,0,-1,size%,-1,%10000000,size%,0,0,"ChangeFSI cache" 
  6527.  ,cacheareanumber%,,cacheareabase%;V%
  6528.  cacheareanumber%=0:=-1
  6529.  "OS_ReadDynamicArea",cacheareanumber% 
  6530.  ,cacheareasize%
  6531.  cacheareasize%<size% 
  6532. removecachearea:
  6533.  42,"Couldn't create area"
  6534. =cacheareabase%
  6535. removecachearea
  6536.  cacheareanumber% 
  6537.  "OS_DynamicArea",1,cacheareanumber%:cacheareanumber%=0
  6538. flushoutput
  6539.  spritearea%<0 
  6540. oksave% 
  6541. (A%=base%:
  6542.  first% A%=ram%+4:first%=
  6543. 12,2,o%,A%,addr%
  6544.  size%-A%
  6545. addr%=base%*size%
  6546. close
  6547.  flag=3600 
  6548. "PhotoCD_Close",pcdh%,1
  6549. #c%:c%=0:
  6550.  scrapf% scrapf%=
  6551. "Remove <wimp$scrap2>"
  6552.  cc% 
  6553. #cc%:cc%=0
  6554.  ccc% 
  6555. #ccc%:ccc%=0
  6556. removecachearea
  6557. close
  6558.  spritearea%<0 
  6559. oksave% 
  6560. flushoutput 
  6561. "OS_File",10,f$,&004,,ram%,ram%+sz%
  6562.  -2:o%=
  6563. #o%,pnm$
  6564.  pnm$ 
  6565.  "P1"
  6566. #o%,"# "+f$+".pbm (options "+oname$+")"
  6567.  xsp%+" "+
  6568.  ysp%
  6569.  Y%=0
  6570. ysp%-1:B%=base%+Y%*xwords%
  6571.  X%=0
  6572. xsp%-1:
  6573.  B%?(X%>>3)
  6574. (1<<(X%
  6575. #o%,"1"; 
  6576. #o%,"0";
  6577. #o%,""
  6578.  "P4"
  6579. #o%,"# "+f$+".pbm (options "+oname$+") binary encoded"
  6580.  xsp%+" "+
  6581.  ysp%
  6582.  X%=0
  6583. 255:code%?X%=X%<<7 
  6584.  X%<<5
  6585.  X%<<3
  6586.  X%<<1
  6587.  X%>>1
  6588.  X%>>3
  6589. X%>>5
  6590. X%>>7:
  6591.  Y%=0
  6592. ysp%-1:B%=base%+Y%*xwords%
  6593.  X%=0
  6594. xsp%-1
  6595. #o%,code%?(B%?(X%>>3)):
  6596.  "P2"
  6597. #o%,"# "+f$+".pgm (options "+oname$+")"
  6598.  xsp%+" "+
  6599.  ysp%
  6600. #o%,"15"
  6601.  Y%=0
  6602. ysp%-1:B%=base%+Y%*xwords%
  6603.  X%=0
  6604. xsp%-1:C%=B%?(X%>>1):
  6605. 1 C%=C%>>4 
  6606.  C%=C%
  6607. #o%," "+
  6608. #o%,""
  6609.  "P5"
  6610. #o%,"# "+f$+".pgm (options "+oname$+") binary encoded"
  6611.  xsp%+" "+
  6612.  ysp%
  6613. #o%,"15"
  6614.  Y%=0
  6615. ysp%-1:B%=base%+Y%*xwords%
  6616.  X%=0
  6617. xsp%-1:C%=B%?(X%>>1):
  6618. 1 C%=C%>>4 
  6619.  C%=C%
  6620. #o%,C%
  6621. #o%:o%=0
  6622.  pnm$="P2"
  6623. pnm$="P1" 
  6624. "Settype "+f$+" &FFF"
  6625.  -3:o%=
  6626. #o%,pnm$
  6627. #o%,"# "+f$+".pcm (options "+oname$+") binary encoded 15bpp (5bits r,g,b)"
  6628.  xsp%+" "+
  6629.  ysp%
  6630. #o%,"31"
  6631. 12,2,o%,ram%,xsp%*ysp%*2
  6632. #o%:o%=0
  6633.  -4:o%=
  6634.  pnm$="IRLAM"
  6635. #o%,"Irlam 24: "+
  6636.  xsp%+" "+
  6637.  ysp%
  6638.  Y%=0
  6639. ysp%-1:B%=ram%+Y%*xwords%
  6640.  X%=0
  6641. xsp%*3-1
  6642. #o%,B%?X%:
  6643. (B%+=1:
  6644.  X%=0
  6645. xsp%*3-1
  6646. #o%,B%?X%:
  6647. (B%+=1:
  6648.  X%=0
  6649. xsp%*3-1
  6650. #o%,B%?X%:
  6651. #o%,pnm$
  6652.  pnm$="P6" 
  6653. #o%,"# "+f$+".ppm (options "+oname$+") binary encoded 24bpp r,g,b"
  6654. #o%,"# "+f$+".ppm (options "+oname$+") "+
  6655. (p6bits*3)+"bpp r,g,b"
  6656.  xsp%+" "+
  6657.  ysp%
  6658. (2^p6bits-1)
  6659.  pnm$="P6" 
  6660. 12,2,o%,ram%,xsp%*ysp%*3
  6661.  Y%=0
  6662. ysp%-1:B%=ram%+Y%*xwords%
  6663.  X%=0
  6664. xsp%-1:C%=B%!(X%*3):
  6665. #o%," "+
  6666. 255)+" "+
  6667. ((C%>>8)
  6668. &FF)+" "+
  6669. ((C%>>16)
  6670. 255);
  6671. #o%,""
  6672. #o%:o%=0
  6673.  pnm$="P3" 
  6674. "Settype "+f$+" &FFF"
  6675.  -5:o%=
  6676. #o%,pnm$
  6677. #o%,"# "+f$+".pcm (options "+oname$+") binary encoded 15bpp (5bits y,u,v)"
  6678.  xsp%+" "+
  6679.  ysp%
  6680. #o%,"31 27 21"
  6681. 12,2,o%,ram%,xsp%*ysp%*2
  6682. #o%:o%=0
  6683.  -9,-10,-11,-12
  6684.  spritearea%<0 
  6685. oksave% 
  6686. 8,10,f$,&c85,,ram%,ram%+jpegsize%
  6687.  ncol=1
  6688. m$="T" 
  6689.  X%=(xsp%*4-1)
  6690. 8*8+6
  6691. &2e,&12e,ram%,oname$,X%
  6692. &2e,&12e,ram%,oname$,X%
  6693.  spritearea%<0 
  6694. oksave% 
  6695. flushoutput 
  6696. &2e,&10c,ram%,f$
  6697. #o%:o%=0:
  6698. "settype "+f$+" &ff9":
  6699. removearea
  6700. "Hourglass_Off"
  6701. defpal
  6702.  C%=0
  6703. <#r%(C%)=(C%
  6704. 16)>>1)/15*F
  6705. =$g%(C%)=(C%
  6706. &60)>>3)/15*F
  6707. >0b%(C%)=(C%
  6708. 8)>>1 
  6709. 128)>>4)/15*F
  6710. defpal2
  6711. r%(0)=F:g%(0)=F:b%(0)=F
  6712. defpal4
  6713. E0r%()=15,10,5,0:
  6714.  C%=0
  6715. 3:r%(C%)=r%(C%)/15*F:
  6716. g%()=r%():b%()=r%()
  6717. defpal16
  6718. I1r%()=15,13,11,9,7,5,3,0,0,14, 0,13,14,5,15, 0
  6719. J1g%()=15,13,11,9,7,5,3,0,4,14,12, 0,14,8,11,10
  6720. K1b%()=15,13,11,9,7,5,3,0,9, 0, 0, 0,11,0, 0,15
  6721.  C%=0
  6722. 15:r%(C%)=r%(C%)/15*F:g%(C%)=g%(C%)/15*F:b%(C%)=b%(C%)/15*F:
  6723. ipal63
  6724. #c%=&38:
  6725.  rpal%(15),gpal%(15),bpal%(15)
  6726.  C%=0
  6727. 15:D%=
  6728. rpal%(C%)=
  6729. #c%>>4 
  6730. gpal%(C%)=
  6731. #c%>>4 
  6732. bpal%(C%)=
  6733. #c%>>4 
  6734.  C%=0
  6735. V)r%(C%)=(rpal%(C%
  6736. 16)>>1)/15*F
  6737. W*g%(C%)=(gpal%(C%
  6738. &60)>>3)/15*F
  6739. X*b%(C%)=(bpal%(C%
  6740. 128)>>4)/15*F
  6741. ipal(D%)
  6742. #c%=&38
  6743.  C%=0
  6744. D%-1:D%=
  6745. r%(C%)=(
  6746. #c%>>4)/15*F
  6747. g%(C%)=(
  6748. #c%>>4)/15*F
  6749. b%(C%)=(
  6750. #c%>>4)/15*F
  6751. newropal(D%)
  6752. #c%=&38
  6753.  C%=0
  6754. D%-1:D%=
  6755. r%(C%)=(D%
  6756. 255)/255*F
  6757. g%(C%)=(D%>>8
  6758. 255)/255*F
  6759. b%(C%)=(D%>>16
  6760. 255)/255*F
  6761. nopal
  6762.  C%=0
  6763. 255:r%(C%)=C%/255*F:
  6764. :g%()=r%():b%()=r%()
  6765. col(A%,B%)
  6766. o6B%=B%<<8
  6767. B%<<4
  6768. &10:pal%!(A%*8)=B%:pal%!(A%*8+4)=B%
  6769. bits(A%)
  6770.  A%=1 
  6771. ="1 bit per pixel" 
  6772.  A%+" bits per pixel"
  6773.  Z%,s$
  6774.  Z%=1
  6775. 80:s$+=
  6776. uc(a$)
  6777.  Z%,z$,b$
  6778.  Z%=1
  6779. a$,Z%,1)
  6780.  z$>="a"
  6781.  z$<="z" z$=
  6782.  z$-32)
  6783. b$+=z$:
  6784. dim(A%)
  6785.  flex% 
  6786. 1B%=nextlocation%:A%=A%+3
  6787. 3:nextlocation%+=A%
  6788. "Wimp_SlotSize",-1,-1 
  6789.  currentslot%
  6790.  currentslot%+&8000<nextlocation% 
  6791.  "Wimp_SlotSize",nextlocation%-&8000,-1 
  6792.  currentslot%
  6793.  currentslot%+&8000<nextlocation% 
  6794.  42,"Can't get enough memory to process image"
  6795.  workspace%<0 
  6796.  B% A%
  6797. XB%=workspace%:workspace%+=A%+3
  6798.  workspace%>worklimit% 
  6799. 42,"Not enough workspace"
  6800. dimjp(
  6801.  flex% 
  6802. 1B%=nextlocation%:A%=A%+3
  6803. 3:nextlocation%+=A%
  6804. "Wimp_SlotSize",-1,-1 
  6805.  currentslot%
  6806.  currentslot%+&8000<nextlocation% 
  6807.  "Wimp_SlotSize",nextlocation%-&8000,-1 
  6808.  currentslot%
  6809.  currentslot%+&8000<nextlocation% A%=currentslot%+&8000-B%
  6810.  workspace%<0 
  6811.  B% A%
  6812. XB%=workspace%:workspace%+=A%+3
  6813.  workspace%>worklimit% 
  6814. 42,"Not enough workspace"
  6815. W1(c%)
  6816. W1(c%)=
  6817. #c%<<8 
  6818. #c%<<16 
  6819. #c%<<24
  6820. #c%<<8
  6821. beHW=
  6822. #c%<<8 
  6823. #c%<<24 
  6824. #c%<<16 
  6825. #c%<<8 
  6826. tiff(T%)
  6827.  1,7:=
  6828.  s$,t$:
  6829.  s$+=t$:t$=
  6830. 0:=s$
  6831.  bigendian 
  6832. #c%<<8 
  6833. #c%<<8
  6834.  4,9:
  6835.  bigendian 
  6836. W1(c%)
  6837.  6:=(
  6838. #c%<<24)>>24
  6839.  8:=(
  6840. tiff(3)<<16)>>16
  6841.  42,"Silly TIFF tag:"+
  6842. nextstrip
  6843. rowstogo%=striprows%
  6844. "stripptr+=1:
  6845. #c%=st%(stripptr)
  6846.  compression=5 
  6847. F!firstcode=0:!oldcode=0:!codesize=setcodes%+1:!stack=stk%:!sp=stk%
  6848. H!maxcode=clearcode%+2:!maxcodesize=2*clearcode%:!curbit=0:!lastbit=0
  6849.  compression=5 
  6850.  compression=32773 
  6851. .!incacheptr=datacache%:!numlefttogo=cache%
  6852. 12,4,c%,datacache%,cache%
  6853. watford(wtsx%,
  6854.  rep%,
  6855.  wt%,X%,c%)
  6856.  rlexpand%,wtsx%,rep%,wt%,X%
  6857.  C%>>6 
  6858.  0:?X%=C%:X%+=1:wt%=C%
  6859.  1:wt%-=1:rep%=C%
  6860.  rlexpand%,wtsx%,rep%,wt%,X%
  6861.  2:rep%=C%
  6862.  rlexpand%,wtsx%,rep%,wt%,X%
  6863.  3:wt%+=1:rep%=C%
  6864.  rlexpand%,wtsx%,rep%,wt%,X%
  6865.  X%=wtsx%
  6866. watfordcache(wtsx%,
  6867.  rep%,
  6868.  wt%,X%)
  6869.  rlexpand%,wtsx%,rep%,wt%,X%
  6870.  bytefromcache%:
  6871.  C%>>6 
  6872.  0:?X%=C%:X%+=1:wt%=C%
  6873.  1:wt%-=1:rep%=C%
  6874.  rlexpand%,wtsx%,rep%,wt%,X%
  6875.  2:rep%=C%
  6876.  rlexpand%,wtsx%,rep%,wt%,X%
  6877.  3:wt%+=1:rep%=C%
  6878.  rlexpand%,wtsx%,rep%,wt%,X%
  6879.  X%=wtsx%
  6880. reduce(
  6881.  C%,D%:C%=A%:D%=B%
  6882.  C%<D% 
  6883.  C%,D%
  6884. C%=C%
  6885.  C%=0
  6886. A%=A%
  6887.  D%:B%=B%
  6888. readpixelrow(z%())
  6889.  rows% 
  6890. rows%-=1:
  6891.  sx%=x% 
  6892. (r$+"(z%())")
  6893. (r$+"(xp%())"):
  6894.  xsample%,xmul%,xdiv%,z%(1,0),xp%(1,0),x%
  6895. z%()=0
  6896. sharppixelrow(z%())
  6897.  rows% 
  6898. rows%-=1:
  6899.  sx%=x% 
  6900.  sharpen% 
  6901. sharp(z%()) 
  6902. (r$+"(z%())"):
  6903.  equal% 
  6904. fit2(z%())
  6905.  sharpen% 
  6906. sharp(xp%()) 
  6907. (r$+"(xp%())"):
  6908.  equal% 
  6909. fit2(xp%())
  6910.  xsample%,xmul%,xdiv%,z%(1,0),xp%(1,0),x%
  6911. z%()=0
  6912. sharp(z%())
  6913. ?yread%-=1:
  6914.  yread% W%=
  6915. (r$+"(rm%())"):
  6916.  equal% 
  6917. fit2(rm%())
  6918.  B%=0
  6919. col:rm%(0,B%)=rm%(1,B%):rm%(sx%+1,B%)=rm%(sx%,B%):
  6920.  sharp%,z%(1,0),rm%(1,0),rm1%(1,0),rm2%(1,0),totvals2%
  6921.  rm2%(),rm1%():rm1%()=rm%()
  6922. scaledpixelrow(z%())
  6923.  sy%=y% 
  6924. readpixelrow(z%())
  6925. :ysamp%-=1:
  6926.  ysamp%=0 
  6927. readpixelrow(xl%()):ysamp%=ymul%
  6928.  ydiv%=1 
  6929. z%()=xl%()
  6930.  ysamp%>=ydiv% 
  6931. "ysamp%-=ydiv%:z%()=xl%()*ydiv%
  6932.  Y%:z%()=xl%()*ysamp%:Y%=ydiv%-ysamp%:ysamp%=0
  6933.  ysamp%=0 
  6934. readpixelrow(xl%()):ysamp%=ymul%
  6935.  ysamp%>Y% 
  6936. 4ysamp%-=Y%:xl2%()=xl%()*Y%:z%()=z%()+xl2%():Y%=0
  6937. <Y%-=ysamp%:xl2%()=xl%()*ysamp%:z%()=z%()+xl2%():ysamp%=0
  6938.  Y%=0
  6939. ysamp%+=1
  6940. fit(z%())
  6941.  histequal%,z%(1,0),new%(0,0),x%
  6942. fit2(z%())
  6943.  histequal%,z%(1,0),new%(0,0),sx%
  6944. adjustpalette(mul,sub)
  6945.  mul=1 
  6946.  sub=0 
  6947.  C%=0
  6948. colourindex
  6949. Qr%(C%)=(r%(C%)-sub)*mul+1:g%(C%)=(g%(C%)-sub)*mul+1:b%(C%)=(b%(C%)-sub)*mul+1
  6950.  ham 
  6951.  C%=0
  6952. 4:ltable!C%=(ltable!C%-sub)*mul+1:
  6953.  input>400 
  6954.  C%=0
  6955. colourindex
  6956. Crpal%(C%)=(rpal%(C%)-sub)*mul+1:gpal%(C%)=(gpal%(C%)-sub)*mul+1
  6957. Ebpal%(C%)=(bpal%(C%)-sub)*mul+1:table%(C%)=(table%(C%)-sub)*mul+1
  6958. cachesize(A%)
  6959. &20023,"ChangeFSI$Cache",A%,-1 
  6960.  Z<>0 
  6961. 35,"ChangeFSI$Cache",A%,20 
  6962. ,,Z:A%?Z=13:cache%=
  6963. $A%,"K")
  6964. $A%,"k") cache%=cache%*1024
  6965. cache%=128*1024
  6966. refill
  6967.  striprows%>0 
  6968. nextstrip
  6969. 12,4,c%,datacache%,cache%:rowstogo%=cacherows%:buff%=datacache%
  6970.  input=24
  6971. input=48 
  6972.  rbo%>=0 rb%=buff%+rbo%:gb%=buff%+gbo%:bb%=buff%+bbo%
  6973. refillpcd
  6974.  pcdblk%!4>=sy% 
  6975.  pcdblk%!12>=sy% pcdblk%!12=sy%
  6976. "PhotoCD_GetBlock",pcdh%,,pcdblk%,datacache%,pcdindex%,,,pcdcache%,pcdcachesize%
  6977. 3Vrowstogo%=cacherows%:buff%=datacache%:pcdblk%!4+=cacherows%:pcdblk%!12+=cacherows%
  6978. 40rb%=buff%+rbo%:gb%=buff%+gbo%:bb%=buff%+bbo%
  6979. 8(z%())
  6980.  mappix%,z%(1,0),r%(0),g%(0),b%(0),buff%:buff%+=rowbytes%
  6981. 8&rowstogo%-=1:
  6982.  rowstogo%=0 
  6983. refill
  6984. 16(z%())
  6985.  mappix%,z%(1,0),rpal%(0),gpal%(0),r%(0),g%(0),b%(0),buff%,buff%
  6986. <7buff%+=rowbytes%:rowstogo%-=1:
  6987.  rowstogo%=0 
  6988. refill
  6989. 24(z%())
  6990.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  6991. @0rb%+=rowbytes%:gb%+=rowbytes%:bb%+=rowbytes%
  6992. A&rowstogo%-=1:
  6993.  rowstogo%=0 
  6994. refill
  6995. 300(z%())
  6996. 12,4,cc%,pbuff%,sx%:
  6997.  mappix%,z%(1,0),rpal%(0),gpal%(0),r%(0),g%(0),b%(0),pbuff%,buff%
  6998. E7buff%+=rowbytes%:rowstogo%-=1:
  6999.  rowstogo%=0 
  7000. refill
  7001. 400(z%())
  7002.  readline%,plbytes%,rep%,pix%,plbuff%
  7003.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7004. 500(z%())
  7005.  LZWdecode%,table%(0),c%,plbuff%,sx%
  7006.  mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
  7007. 800(z%())
  7008. watfordcache(wtsx%,rep%,wt%,plbuff%)
  7009.  mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
  7010. 801(z%())
  7011. watford(wtsx1%,rep1%,wt1%,buff%,c%)
  7012. watford(wtsx2%,rep2%,wt2%,wtsx1%,cc%)
  7013. watford(wtsx3%,rep3%,wt3%,wtsx2%,ccc%)
  7014.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7015. 901(z%())
  7016. 12,4,c%,rb%,sx%:
  7017. 12,4,cc%,gb%,sx%:
  7018. 12,4,ccc%,bb%,sx%
  7019.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7020. 902(z%())
  7021.  unpack%,buff%:
  7022.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7023. _7buff%+=rowbytes%:rowstogo%-=1:
  7024.  rowstogo%=0 
  7025. refill
  7026. 1000(z%())
  7027. bAX%=buff%:
  7028.  rep%>0 C%=?pa%:
  7029.  rlexpand%,pasx%,rep%,C%,X%:pa%+=1
  7030.  rep2%>0 C%=?pa%:
  7031.  rlexpand%,pasx%,rep2%,C%,X%:pa%+=1
  7032.  C%=0 
  7033. eBrep%=
  7034. #c%:C%=?pa%:
  7035.  rlexpand%,pasx%,rep%,C%,X%:
  7036.  rep%=0 pa%+=1
  7037. gVrep2%=C%
  7038. 15:rep%=C%>>4:
  7039.  rep% C%=?pa%:
  7040.  rlexpand%,pasx%,rep%,C%,X%:
  7041.  rep%=0 pa%+=1
  7042.  X%<pasx% 
  7043.  rep2% C%=?pa%:
  7044.  rlexpand%,pasx%,rep2%,C%,X%:
  7045.  rep2%=0 pa%+=1
  7046.  X%=pasx%
  7047.  mappix%,z%(1,0),r%(0),g%(0),b%(0),buff%
  7048. 1001(z%())
  7049. nAX%=buff%:
  7050.  rep%>0 C%=?pa%:
  7051.  rlexpand%,pasx%,rep%,C%,X%:pa%+=1
  7052.  rep%=
  7053. #c%:C%=?pa%:
  7054.  rlexpand%,pasx%,rep%,C%,X%:
  7055.  rep%=0 pa%+=1
  7056.  X%=pasx%:
  7057.  mappix%,z%(1,0),r%(0),g%(0),b%(0),buff%
  7058. 1100(z%())
  7059.  readline%,plbytes%,rep%,pix%,plbuff%
  7060.  mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
  7061. 1400(z%())
  7062.  vrep% 
  7063. vrep%-=1
  7064. z9G%=buff%:
  7065.  X%=1
  7066. planes%:G%+=rowbytes%:F%=G%-rowbytes%
  7067.  C%=0 
  7068.  C%=0 
  7069. #c%:vrep%=
  7070. #c%-1
  7071. *D%=F%:
  7072. 12,4,c%,F%,patlen%:F%+=patlen%
  7073.  C%>1 
  7074.  N%=2
  7075.  E%=0
  7076. patlen%-1:F%?E%=D%?E%:
  7077. :F%+=patlen%:
  7078.  C%=128 
  7079. 12,4,c%,F%,C%:F%+=C%
  7080. >?F%=(C%
  7081. &80)<>0:
  7082.  E%=F%+1
  7083. F%+(C%
  7084. &7F):?E%=?F%:
  7085. :F%+=C%
  7086.  F%>=G%:
  7087.  plancnv%,rowbytes%,buff%,pbuff%
  7088.  mappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff%
  7089. 1501(z%())
  7090.  readiff%,rowbytes%,plbuff%:rowstogo%-=1:
  7091.  rowstogo%=0 
  7092. nextstrip
  7093.  mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
  7094. 1505(z%())
  7095.  LZWdecode%,table%(0),c%,plbuff%,rowbytes%
  7096. )rowstogo%-=1:
  7097.  rowstogo%=0 
  7098. nextstrip
  7099.  mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
  7100. 1515(z%())
  7101.  LZWdecode%,table%(0),c%,plbuff%,rowbytes%
  7102. )rowstogo%-=1:
  7103.  rowstogo%=0 
  7104. nextstrip
  7105.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7106. 1600(z%())
  7107.  plancnv%,realrowbytes%,buff%,pbuff%:buff%+=rowbytes%
  7108.  mappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff%
  7109. &rowstogo%-=1:
  7110.  rowstogo%=0 
  7111. refill
  7112. 1601(z%())
  7113.  X%=0
  7114. planes%-1:F%=plbuff%+X%*rowbytes%:
  7115.  readiff%,rowbytes%,F%:
  7116.  masking% 
  7117.  readiff%,rowbytes%,pbuff%
  7118.  plancnv%,rowbytes%,plbuff%,pbuff%
  7119.  mappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff%
  7120. 1850(z%())
  7121.  readiff%,rowbytes%,plbuff%
  7122.  mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
  7123. 1851(z%())
  7124.  readiff%,rowbytes%,plbuff%
  7125.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7126. 1900(z%())
  7127.  readline%,plbytes%,rep%,pix%,plbuff%
  7128.  plancnv%,rowbytes%,plbuff%,pbuff%
  7129.  mappix%,z%(1,0),r%(0),g%(0),b%(0),pbuff%
  7130. 2000(z%())
  7131. X%=buff%:
  7132.  C%<128 
  7133.  C%+=1:
  7134. 12,4,c%,X%,C%:X%+=C%
  7135. 1F%=X%:?F%=
  7136.  C%=C%
  7137. -1:?X%=?F%:X%+=1:
  7138.  X%=buff%+rowbytes%
  7139.  mappix%,z%(1,0),r%(0),g%(0),b%(0),buff%
  7140. 2001(z%())
  7141. X%=buff%:
  7142.  C%<128 
  7143. &C%=(C%+1)*2:
  7144. 12,4,c%,X%,C%:X%+=C%
  7145. 7F%=X%:
  7146. 12,4,c%,X%,2:
  7147.  C%=C%
  7148. -1:!X%=!F%:X%+=2:
  7149.  X%=buff%+rowbytes%
  7150.  mappix%,z%(1,0),rpal%(0),gpal%(0),r%(0),g%(0),b%(0),buff%,buff%
  7151. 2002(z%())
  7152. X%=buff%:
  7153.  C%<128 
  7154. +C%=(C%+1)*step24:
  7155. 12,4,c%,X%,C%:X%+=C%
  7156. AF%=X%:
  7157. 12,4,c%,X%,step24:
  7158.  C%=C%
  7159. -1:!X%=!F%:X%+=step24:
  7160.  X%=buff%+rowbytes%
  7161.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7162. 2250(z%())
  7163.  mappix%,z%(1,0),rpal%(0),r%(0),gpal%(0),g%(0),bpal%(0),b%(0),table%(0),buff%
  7164. 7buff%+=rowbytes%:rowstogo%-=1:
  7165.  rowstogo%=0 
  7166. refill
  7167. 2300(z%())
  7168.  clrfirst% 
  7169.  X%=0
  7170. sx%-1:rb%?X%=?back%:gb%?X%=back%?1:bb%?X%=back%?2:
  7171.  vrep% 
  7172. vrep%-=1
  7173.  vrep%=-1:
  7174.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%:=
  7175. #c%:D%=
  7176. &40 D%=
  7177.  1:E%=
  7178. :vrep%=D%-1:
  7179.  vrep%<0 vrep%=
  7180.  2:ccol%=back%?D%:cbuf%=rb%+sx%*D%:
  7181.  D%=255 cbuf%=alpha%
  7182.  X%=0
  7183. D%-1:cbuf%?X%=ccol%:
  7184. :cbuf%+=D%
  7185. 12,4,c%,cbuf%,D%+1:cbuf%+=D%+1:
  7186.  D%+1
  7187.  6:C%=
  7188.  X%=0
  7189. D%:cbuf%?X%=C%:
  7190. :cbuf%+=D%+1
  7191.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7192. 2401(z%())
  7193.  bm_rle8,rowbytes%,plbuff%
  7194.  mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
  7195. 2402(z%())
  7196.  bm_rle4,rowbytes%,plbuff%
  7197.  mappix%,z%(1,0),r%(0),g%(0),b%(0),plbuff%
  7198. 3000(z%())
  7199.  mappix%,z%(1,0),rpal%(0),r%(0),gpal%(0),g%(0),bpal%(0),b%(0),table%(0),buff%
  7200. 7buff%+=rowbytes%:rowstogo%-=1:
  7201.  rowstogo%=0 
  7202. refill
  7203. 3500(z%())
  7204. 3600(z%())
  7205.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7206. 0rb%+=rowbytes%:gb%+=rowbytes%:bb%+=rowbytes%
  7207. )rowstogo%-=1:
  7208.  rowstogo%=0 
  7209. refillpcd
  7210. 3708(z%())
  7211. 4A%=jpegspace%:jpegy%-=1:B%=jpegy%:rb%=
  7212. (jpeg%+4)
  7213.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%
  7214. 3724(z%())
  7215. HA%=jpegspace%:jpegy%-=1:B%=jpegy%:rb%=
  7216. (jpeg%+4):gb%=rb%+1:bb%=rb%+2
  7217.  mappix%,z%(1,0),r%(0),g%(0),b%(0),rb%,gb%,bb%
  7218. rewind
  7219. rows%=sy%:
  7220.  flag 
  7221. #c%=st%
  7222.  100:
  7223. #c%=4
  7224.  200:
  7225. #c%=st%:rep%=0
  7226.  300:
  7227. #c%=st%:
  7228. #cc%=stcc%
  7229.  400:
  7230. #c%=st%:rep%=0
  7231.  500:
  7232.  I%=0
  7233. clearcode%-1:table%(I%)=I%:
  7234. #c%=st%
  7235. F!firstcode=0:!oldcode=0:!codesize=setcodes%+1:!stack=stk%:!sp=stk%
  7236. H!maxcode=clearcode%+2:!maxcodesize=2*clearcode%:!curbit=0:!lastbit=0
  7237.  501:buff%=datacache%
  7238.  600:
  7239. #c%=&380
  7240.  700:
  7241. #c%=st%
  7242.  800:
  7243. #c%=0:rep%=0:wt%=0
  7244.  801:
  7245. #c%=0:
  7246. #cc%=0:
  7247. #ccc%=0:rep1%=0:wt1%=0:rep2%=0:wt2%=0:rep3%=0:wt3%=0
  7248.  900:
  7249. #c%=0
  7250.  901:
  7251. #c%=0:
  7252. #cc%=0:
  7253. #ccc%=0
  7254.  902:
  7255. #c%=st%
  7256.  1000:
  7257. #c%=st%:pa%=ctable%:rep%=0:rep2%=0
  7258.  1100:
  7259. #c%=st%:rep%=0
  7260.  1200:
  7261. #c%=1600
  7262.  1300:
  7263. #c%=0
  7264.  1301:
  7265. #c%=0:
  7266. #cc%=0:
  7267. #ccc%=0
  7268.  1400:
  7269. #c%=st%:vrep%=0
  7270.  1500:
  7271. #c%=st%(0):rowstogo%=striprows%:stripptr=0
  7272.  compression=5 
  7273. F!firstcode=0:!oldcode=0:!codesize=setcodes%+1:!stack=stk%:!sp=stk%
  7274. H!maxcode=clearcode%+2:!maxcodesize=2*clearcode%:!curbit=0:!lastbit=0
  7275.  1600:
  7276. #c%=st%
  7277.  1700:
  7278. #c%=16
  7279.  1800,1850:
  7280. #c%=st%
  7281.  1900:
  7282. #c%=128:rep%=-1
  7283.  2000:
  7284. #c%=st%
  7285.  2100:
  7286. #c%=7
  7287.  2200:
  7288. #c%=st%
  7289.  2250:
  7290. #c%=st%
  7291.  2300:
  7292. #c%=st%:vrep%=0
  7293.  2400:
  7294. #c%=st%
  7295.  2500:
  7296. #c%=st%
  7297.  2600:
  7298. #c%=st%
  7299.  2700:
  7300. #c%=st%
  7301.  2800:
  7302. #c%=st%
  7303.  2900:
  7304. #c%=st%
  7305.  3000:
  7306. #c%=0
  7307.  3600:pcdblk%!4=0
  7308.  3700:jpegy%=sy%
  7309.  3900,3905:
  7310. #c%=st%
  7311.  cache% 
  7312.  flag=3600 
  7313. 6Epcdblk%!12=cacherows%:
  7314. refillpcd:
  7315.  cache%>=filesize% rowstogo%=-1
  7316.  cache%<filesize% 
  7317. 12,4,c%,datacache%,cache%:rowstogo%=cacherows%
  7318. buff%=datacache%
  7319.  cachebytes% !incacheptr=datacache%:!numlefttogo=cache%
  7320.  input=24
  7321. input=48 
  7322.  rbo%>=0 rb%=buff%+rbo%:gb%=buff%+gbo%:bb%=buff%+bbo%
  7323.  flag=1500 
  7324.  compression=5 rowstogo%=striprows%
  7325. Assemble_Shell
  7326.  I%=0
  7327. P%=code%
  7328. [ OPT I%
  7329. .Shell_Call
  7330. MOV   R9,R0
  7331. FSMOV R0,#0:MOV R1,#0:MOV R2,#0:MOV R3,#2:MOV R4,#0:MOV R5,#0:MOV R6,#0:MOV R7,#0
  7332. SWI   "OS_SetEnv"
  7333. STMFD R13!,{R0-R7, R12}
  7334. I-MOV   R0,#0:MOV R1,#0:MOV R2,#0:MOV R3,#0
  7335. SWI   "OS_Control"
  7336. STMFD R13!,{R0-R3}
  7337. L%MOV   R0,#&10:MOV R1,#0:MOV R2,#0
  7338. M!SWI   "XOS_ChangeEnvironment"
  7339. STMFD R13!,{R1,R2}
  7340. LDR   R3,[R14,#28]
  7341. LDR   R3,[R8,R3]
  7342. STMFD R13!,{R3,R9,R14}
  7343. SUB   R9,R13,#1024
  7344. MOV   R5,R9
  7345. T-ADR   R6,Shell_Job:ADR   R4,Shell_Job_End
  7346. .Shell_Copy
  7347. LDR   R2,[R6],#4
  7348. STR   R2,[R5],#4
  7349. CMP   R6,R4
  7350. BCC   Shell_Copy
  7351. MOV   PC,R9
  7352. .Shell_Job
  7353. LDR   R2,[R3,#-4]!
  7354. STR   R2,[R9,#-4]!
  7355. CMP   R3,#&8000
  7356. BHI   Shell_Job
  7357. STMFD R13!,{R9}
  7358. ADR   R0,Shell_Exit
  7359. bKMOV   R1,R9:MOV R2,#0:MOV R3,#2:MOV R4,#0:MOV R5,#0:MOV R6,#0:MOV R7,#0
  7360. SWI   "OS_SetEnv"
  7361. ADR   R0,Shell_Error
  7362. ADR   R1,Shell_Buffer
  7363. MOV   R2,#0:MOV R3,#0
  7364. SWI   "OS_Control"
  7365. MOV   R0,#&10
  7366. ADR   R1,Shell_UpCall
  7367. MVN   R2,#0
  7368. k!SWI   "XOS_ChangeEnvironment"
  7369. STR   R13,Shell_Job_End
  7370. LDR   R0,[R13,#4*2]
  7371. ADD   R0,R0,R9
  7372. SUB   R0,R0,#&8000
  7373. SWI   "OS_CLI"
  7374. .Shell_Exit
  7375. MOV   r0, #0
  7376. .Shell_Common
  7377. STR   r0, Shell_ErrorWord
  7378. LDR   R13,Shell_Job_End
  7379. LDMFD R13!,{R8,R9,R10,R14}
  7380. LDMFD R13!,{R1-R2}
  7381. MOV   R0,#&10
  7382. y SWI   "OS_ChangeEnvironment"
  7383. LDMFD R13!,{R0-R3}
  7384. SWI   "OS_Control"
  7385. LDMFD R13!,{R0-R7, R12}
  7386. SWI   "OS_SetEnv"
  7387. MOV   R1,#&8000
  7388. .Shell_Restore
  7389. LDR   R2,[R8],#4
  7390. STR   R2,[R1],#4
  7391. CMP   R1,R9
  7392. BCC   Shell_Restore
  7393. LDR   R0,Shell_ErrorWord
  7394. TEQ   R0,#0
  7395. BICEQS PC,R14,#&10000000
  7396. RNES PC,R14,#&10000000
  7397. .Shell_UpCall
  7398. MOV   PC,R14
  7399. .Shell_Error
  7400. ADR   r0, Shell_Buffer + 4
  7401. B     Shell_Common
  7402. .Shell_Buffer
  7403. EQUD 0
  7404. EQUD &12345678
  7405. EQUS 
  7406. EQUS 
  7407. .Shell_ErrorWord
  7408. EQUD 0
  7409. .Shell_Job_End
  7410. EQUD 0
  7411. A%=Shell_Job_End+4
  7412. subtask(a$)
  7413.  task% 
  7414. "Wimp_StartTask",a$
  7415.  code% 1024
  7416. Assemble_Shell
  7417. $A%=a$:
  7418.  Shell_Call
  7419. snb_next(c%)
  7420. #c%<>255 
  7421. #c%:=&100
  7422.  v%<>255:
  7423. #c%:v%=256
  7424. snb_skip(c%)
  7425.  v%,w%:v%=
  7426. #c%:w%=
  7427. #c%:w%=(w%*256+
  7428. #c%=v%+w%:
  7429. snb_needdjpeg(c%)
  7430.  sz%:
  7431.  Not Acorn code - added. Assumes file is JPEG!
  7432. #c%=2:
  7433. :sz%=
  7434. snb_next(c%):
  7435.  sz%=&C0 
  7436.  sz%>255:=
  7437.  sz%>&C0 
  7438. sz%<&D0 
  7439. sz%<>&C4 
  7440. sz%<>&CC:=
  7441.  M_SOFn
  7442.  sz%>&E0 
  7443.  sz%<&F0:=
  7444.  M_APPn
  7445. snb_skip(c%):
  7446. #c%:=
  7447. getstring(ptr%)
  7448.  c%,p$
  7449.     p$=""
  7450.  (?ptr%>31 
  7451.  ?ptr%<256) 
  7452. (p$)<255
  7453.   c%=?ptr%
  7454.   p$+=
  7455.   ptr%+=1
  7456.